//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS FSx service.
///
/// Amazon FSx is a fully managed service that makes it easy for storage and application administrators to launch and use shared file storage.
public struct FSx: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the FSx client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "AWSSimbaAPIService_v20180301",
            serviceName: "FSx",
            serviceIdentifier: "fsx",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2018-03-01",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: FSxErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "fsx-fips.ca-central-1.amazonaws.com",
            "ca-west-1": "fsx-fips.ca-west-1.amazonaws.com",
            "us-east-1": "fsx-fips.us-east-1.amazonaws.com",
            "us-east-2": "fsx-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "fsx-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "fsx-fips.us-gov-west-1.amazonaws.com",
            "us-iso-east-1": "fsx-fips.us-iso-east-1.c2s.ic.gov",
            "us-west-1": "fsx-fips.us-west-1.amazonaws.com",
            "us-west-2": "fsx-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Use this action to associate one or more Domain Name Server (DNS) aliases with an existing Amazon FSx for Windows File Server file system.  A file system can have a maximum of 50 DNS aliases associated with it at any one time. If you try to  associate a DNS alias that is already associated with the file system, FSx takes no action on that alias in the request.  For more information, see Working with DNS Aliases and  Walkthrough 5: Using DNS aliases to access your file system, including additional steps you must take to be able to access your file system using a DNS alias. The system response shows the DNS aliases that  Amazon FSx is attempting to associate with the file system.  Use the  API  operation to monitor the status of the aliases Amazon FSx is  associating with the file system.
    @Sendable
    @inlinable
    public func associateFileSystemAliases(_ input: AssociateFileSystemAliasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AssociateFileSystemAliasesResponse {
        try await self.client.execute(
            operation: "AssociateFileSystemAliases", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Use this action to associate one or more Domain Name Server (DNS) aliases with an existing Amazon FSx for Windows File Server file system.  A file system can have a maximum of 50 DNS aliases associated with it at any one time. If you try to  associate a DNS alias that is already associated with the file system, FSx takes no action on that alias in the request.  For more information, see Working with DNS Aliases and  Walkthrough 5: Using DNS aliases to access your file system, including additional steps you must take to be able to access your file system using a DNS alias. The system response shows the DNS aliases that  Amazon FSx is attempting to associate with the file system.  Use the  API  operation to monitor the status of the aliases Amazon FSx is  associating with the file system.
    ///
    /// Parameters:
    ///   - aliases: An array of one or more DNS alias names to associate with the file system.  The alias name has to comply with the following formatting requirements:   Formatted as a fully-qualified domain name (FQDN),  hostname.domain ,  for example, accounting.corp.example.com.   Can contain alphanumeric characters and the hyphen (-).   Cannot start or end with a hyphen.   Can start with a numeric.   For DNS alias names, Amazon FSx stores alphabetic characters as lowercase letters (a-z), regardless of how you specify them:  as uppercase letters, lowercase letters, or the corresponding letters in escape codes.
    ///   - clientRequestToken: 
    ///   - fileSystemId: Specifies the file system with which you want to associate one or more DNS aliases.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateFileSystemAliases(
        aliases: [String]? = nil,
        clientRequestToken: String? = AssociateFileSystemAliasesRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AssociateFileSystemAliasesResponse {
        let input = AssociateFileSystemAliasesRequest(
            aliases: aliases, 
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId
        )
        return try await self.associateFileSystemAliases(input, logger: logger)
    }

    /// Cancels an existing Amazon FSx for Lustre data repository task if that task is in either the  PENDING or EXECUTING state. When you cancel an export task, Amazon FSx does the following.   Any files that FSx has already exported are not reverted.   FSx continues to export any files that are in-flight when the cancel operation is received.   FSx does not export any files that have not yet been exported.   For a release task, Amazon FSx will stop releasing files upon cancellation. Any files that have already been released will remain in the released state.
    @Sendable
    @inlinable
    public func cancelDataRepositoryTask(_ input: CancelDataRepositoryTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelDataRepositoryTaskResponse {
        try await self.client.execute(
            operation: "CancelDataRepositoryTask", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Cancels an existing Amazon FSx for Lustre data repository task if that task is in either the  PENDING or EXECUTING state. When you cancel an export task, Amazon FSx does the following.   Any files that FSx has already exported are not reverted.   FSx continues to export any files that are in-flight when the cancel operation is received.   FSx does not export any files that have not yet been exported.   For a release task, Amazon FSx will stop releasing files upon cancellation. Any files that have already been released will remain in the released state.
    ///
    /// Parameters:
    ///   - taskId: Specifies the data repository task to cancel.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelDataRepositoryTask(
        taskId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelDataRepositoryTaskResponse {
        let input = CancelDataRepositoryTaskRequest(
            taskId: taskId
        )
        return try await self.cancelDataRepositoryTask(input, logger: logger)
    }

    /// Copies an existing backup within the same Amazon Web Services account to another Amazon Web Services Region (cross-Region copy) or within the same Amazon Web Services Region (in-Region copy). You can have up to five backup copy requests in progress to a single destination Region per account. You can use cross-Region backup copies for cross-Region disaster recovery. You can periodically take backups and copy them to another Region so that in the event of a disaster in the primary Region, you can restore from backup and recover availability quickly in the other Region. You can make cross-Region copies only within your Amazon Web Services partition. A partition is a grouping of Regions. Amazon Web Services currently has three partitions: aws (Standard Regions), aws-cn (China Regions), and aws-us-gov (Amazon Web Services GovCloud [US] Regions). You can also use backup copies to clone your file dataset to another Region or within the same Region. You can use the SourceRegion parameter to specify the Amazon Web Services Region from which the backup will be copied. For example, if you make the call from the us-west-1 Region and want to copy a backup from the us-east-2 Region, you specify us-east-2 in the SourceRegion parameter to make a cross-Region copy. If you don't specify a Region, the backup copy is created in the same Region where the request is sent from (in-Region copy). For more information about creating backup copies, see  Copying backups in the Amazon FSx for Windows User Guide, Copying backups in the Amazon FSx for Lustre User Guide, and Copying backups in the Amazon FSx for OpenZFS User Guide.
    @Sendable
    @inlinable
    public func copyBackup(_ input: CopyBackupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CopyBackupResponse {
        try await self.client.execute(
            operation: "CopyBackup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Copies an existing backup within the same Amazon Web Services account to another Amazon Web Services Region (cross-Region copy) or within the same Amazon Web Services Region (in-Region copy). You can have up to five backup copy requests in progress to a single destination Region per account. You can use cross-Region backup copies for cross-Region disaster recovery. You can periodically take backups and copy them to another Region so that in the event of a disaster in the primary Region, you can restore from backup and recover availability quickly in the other Region. You can make cross-Region copies only within your Amazon Web Services partition. A partition is a grouping of Regions. Amazon Web Services currently has three partitions: aws (Standard Regions), aws-cn (China Regions), and aws-us-gov (Amazon Web Services GovCloud [US] Regions). You can also use backup copies to clone your file dataset to another Region or within the same Region. You can use the SourceRegion parameter to specify the Amazon Web Services Region from which the backup will be copied. For example, if you make the call from the us-west-1 Region and want to copy a backup from the us-east-2 Region, you specify us-east-2 in the SourceRegion parameter to make a cross-Region copy. If you don't specify a Region, the backup copy is created in the same Region where the request is sent from (in-Region copy). For more information about creating backup copies, see  Copying backups in the Amazon FSx for Windows User Guide, Copying backups in the Amazon FSx for Lustre User Guide, and Copying backups in the Amazon FSx for OpenZFS User Guide.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - copyTags: A Boolean flag indicating whether tags from the source backup should be copied to the backup copy. This value defaults to false. If you set CopyTags to true and the source backup has existing tags, you can use the Tags parameter to create new tags, provided that the sum of the source backup tags and the new tags doesn't exceed 50. Both sets of tags are merged. If there are tag conflicts (for example, two tags with the same key but different values), the tags created with the Tags parameter take precedence.
    ///   - kmsKeyId: 
    ///   - sourceBackupId: The ID of the source backup. Specifies the ID of the backup that's being copied.
    ///   - sourceRegion: The source Amazon Web Services Region of the backup. Specifies the Amazon Web Services Region from which the backup is being copied. The source and destination Regions must be in the same Amazon Web Services partition. If you don't specify a Region, SourceRegion defaults to the Region where the request is sent from (in-Region copy).
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func copyBackup(
        clientRequestToken: String? = CopyBackupRequest.idempotencyToken(),
        copyTags: Bool? = nil,
        kmsKeyId: String? = nil,
        sourceBackupId: String? = nil,
        sourceRegion: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CopyBackupResponse {
        let input = CopyBackupRequest(
            clientRequestToken: clientRequestToken, 
            copyTags: copyTags, 
            kmsKeyId: kmsKeyId, 
            sourceBackupId: sourceBackupId, 
            sourceRegion: sourceRegion, 
            tags: tags
        )
        return try await self.copyBackup(input, logger: logger)
    }

    /// Updates an existing volume by using a snapshot from another Amazon FSx for OpenZFS file system. For more information, see on-demand data replication in the Amazon FSx for OpenZFS User Guide.
    @Sendable
    @inlinable
    public func copySnapshotAndUpdateVolume(_ input: CopySnapshotAndUpdateVolumeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CopySnapshotAndUpdateVolumeResponse {
        try await self.client.execute(
            operation: "CopySnapshotAndUpdateVolume", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing volume by using a snapshot from another Amazon FSx for OpenZFS file system. For more information, see on-demand data replication in the Amazon FSx for OpenZFS User Guide.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - copyStrategy: Specifies the strategy to use when copying data from a snapshot to the volume.     FULL_COPY - Copies all data from the snapshot to the volume.     INCREMENTAL_COPY - Copies only the snapshot data that's changed since the previous replication.     CLONE isn't a valid copy strategy option for the CopySnapshotAndUpdateVolume operation.
    ///   - options: Confirms that you want to delete data on the destination volume that wasn’t there during the previous snapshot replication. Your replication will fail if you don’t include an option for a specific type of data and that data is on your destination. For example, if you don’t include DELETE_INTERMEDIATE_SNAPSHOTS and there are intermediate snapshots on the destination, you can’t copy the snapshot.    DELETE_INTERMEDIATE_SNAPSHOTS - Deletes snapshots on the destination volume that aren’t on the source volume.    DELETE_CLONED_VOLUMES - Deletes snapshot clones on the destination volume that aren't on the source volume.    DELETE_INTERMEDIATE_DATA - Overwrites snapshots on the destination volume that don’t match the source snapshot that you’re copying.
    ///   - sourceSnapshotARN: 
    ///   - volumeId: Specifies the ID of the volume that you are copying the snapshot to.
    ///   - logger: Logger use during operation
    @inlinable
    public func copySnapshotAndUpdateVolume(
        clientRequestToken: String? = CopySnapshotAndUpdateVolumeRequest.idempotencyToken(),
        copyStrategy: OpenZFSCopyStrategy? = nil,
        options: [UpdateOpenZFSVolumeOption]? = nil,
        sourceSnapshotARN: String? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CopySnapshotAndUpdateVolumeResponse {
        let input = CopySnapshotAndUpdateVolumeRequest(
            clientRequestToken: clientRequestToken, 
            copyStrategy: copyStrategy, 
            options: options, 
            sourceSnapshotARN: sourceSnapshotARN, 
            volumeId: volumeId
        )
        return try await self.copySnapshotAndUpdateVolume(input, logger: logger)
    }

    /// Creates an S3 access point and attaches it to an Amazon FSx volume. For FSx for OpenZFS file systems, the  volume must be hosted on a high-availability file system, either Single-AZ or Multi-AZ. For more information, see Accessing your data using Amazon S3 access points. in the Amazon FSx for OpenZFS User Guide.  The requester requires the following permissions to perform these actions:    fsx:CreateAndAttachS3AccessPoint     s3:CreateAccessPoint     s3:GetAccessPoint     s3:PutAccessPointPolicy     s3:DeleteAccessPoint    The following actions are related to CreateAndAttachS3AccessPoint:    DescribeS3AccessPointAttachments     DetachAndDeleteS3AccessPoint
    @Sendable
    @inlinable
    public func createAndAttachS3AccessPoint(_ input: CreateAndAttachS3AccessPointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAndAttachS3AccessPointResponse {
        try await self.client.execute(
            operation: "CreateAndAttachS3AccessPoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an S3 access point and attaches it to an Amazon FSx volume. For FSx for OpenZFS file systems, the  volume must be hosted on a high-availability file system, either Single-AZ or Multi-AZ. For more information, see Accessing your data using Amazon S3 access points. in the Amazon FSx for OpenZFS User Guide.  The requester requires the following permissions to perform these actions:    fsx:CreateAndAttachS3AccessPoint     s3:CreateAccessPoint     s3:GetAccessPoint     s3:PutAccessPointPolicy     s3:DeleteAccessPoint    The following actions are related to CreateAndAttachS3AccessPoint:    DescribeS3AccessPointAttachments     DetachAndDeleteS3AccessPoint
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: The name you want to assign to this S3 access point.
    ///   - openZFSConfiguration: Specifies the configuration to use when creating and attaching an S3 access point to an FSx for OpenZFS volume.
    ///   - s3AccessPoint: Specifies the virtual private cloud (VPC) configuration if you're creating an access point that is restricted to a VPC.  For more information, see Creating access points restricted to a virtual private cloud.
    ///   - type: The type of S3 access point you want to create. Only OpenZFS is supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAndAttachS3AccessPoint(
        clientRequestToken: String? = CreateAndAttachS3AccessPointRequest.idempotencyToken(),
        name: String? = nil,
        openZFSConfiguration: CreateAndAttachS3AccessPointOpenZFSConfiguration? = nil,
        s3AccessPoint: CreateAndAttachS3AccessPointS3Configuration? = nil,
        type: S3AccessPointAttachmentType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAndAttachS3AccessPointResponse {
        let input = CreateAndAttachS3AccessPointRequest(
            clientRequestToken: clientRequestToken, 
            name: name, 
            openZFSConfiguration: openZFSConfiguration, 
            s3AccessPoint: s3AccessPoint, 
            type: type
        )
        return try await self.createAndAttachS3AccessPoint(input, logger: logger)
    }

    /// Creates a backup of an existing Amazon FSx for Windows File Server file system, Amazon FSx for Lustre file system, Amazon FSx for NetApp ONTAP volume, or Amazon FSx for OpenZFS file system. We recommend creating regular backups so that you can restore a file system or volume from a backup if an issue arises with the original file system or volume. For Amazon FSx for Lustre file systems, you can create a backup only for file systems that have the following configuration:   A Persistent deployment type   Are not linked to a data repository   For more information about backups, see the following:   For Amazon FSx for Lustre, see Working with FSx for Lustre backups.   For Amazon FSx for Windows, see Working with FSx for Windows backups.   For Amazon FSx for NetApp ONTAP, see Working with FSx for NetApp ONTAP backups.   For Amazon FSx for OpenZFS, see Working with FSx for OpenZFS backups.   If a backup with the specified client request token exists and the parameters match, this operation returns the description of the existing backup. If a backup with the specified client request token exists and the parameters don't match, this operation returns IncompatibleParameterError. If a backup with the specified client request token doesn't exist, CreateBackup does the following:    Creates a new Amazon FSx backup with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the backup.   By using the idempotent operation, you can retry a CreateBackup operation without the risk of creating an extra backup. This approach can be useful when an initial call fails in a way that makes it unclear whether a backup was created. If you use the same client request token and the initial call created a backup, the operation returns a successful result because all the parameters are the same. The CreateBackup operation returns while the backup's lifecycle state is still CREATING. You can check the backup creation status by calling the DescribeBackups operation, which returns the backup state along with other information.
    @Sendable
    @inlinable
    public func createBackup(_ input: CreateBackupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBackupResponse {
        try await self.client.execute(
            operation: "CreateBackup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a backup of an existing Amazon FSx for Windows File Server file system, Amazon FSx for Lustre file system, Amazon FSx for NetApp ONTAP volume, or Amazon FSx for OpenZFS file system. We recommend creating regular backups so that you can restore a file system or volume from a backup if an issue arises with the original file system or volume. For Amazon FSx for Lustre file systems, you can create a backup only for file systems that have the following configuration:   A Persistent deployment type   Are not linked to a data repository   For more information about backups, see the following:   For Amazon FSx for Lustre, see Working with FSx for Lustre backups.   For Amazon FSx for Windows, see Working with FSx for Windows backups.   For Amazon FSx for NetApp ONTAP, see Working with FSx for NetApp ONTAP backups.   For Amazon FSx for OpenZFS, see Working with FSx for OpenZFS backups.   If a backup with the specified client request token exists and the parameters match, this operation returns the description of the existing backup. If a backup with the specified client request token exists and the parameters don't match, this operation returns IncompatibleParameterError. If a backup with the specified client request token doesn't exist, CreateBackup does the following:    Creates a new Amazon FSx backup with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the backup.   By using the idempotent operation, you can retry a CreateBackup operation without the risk of creating an extra backup. This approach can be useful when an initial call fails in a way that makes it unclear whether a backup was created. If you use the same client request token and the initial call created a backup, the operation returns a successful result because all the parameters are the same. The CreateBackup operation returns while the backup's lifecycle state is still CREATING. You can check the backup creation status by calling the DescribeBackups operation, which returns the backup state along with other information.
    ///
    /// Parameters:
    ///   - clientRequestToken: (Optional) A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent creation. This string is automatically filled on your behalf when you use the Command Line Interface (CLI) or an Amazon Web Services SDK.
    ///   - fileSystemId: The ID of the file system to back up.
    ///   - tags: (Optional) The tags to apply to the backup at backup creation. The key value of the Name tag appears in the console as the backup name. If you have set CopyTagsToBackups to true, and you specify one or more tags using the CreateBackup operation, no existing file system tags are copied from the file system to the backup.
    ///   - volumeId: (Optional) The ID of the FSx for ONTAP volume to back up.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBackup(
        clientRequestToken: String? = CreateBackupRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        tags: [Tag]? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBackupResponse {
        let input = CreateBackupRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            tags: tags, 
            volumeId: volumeId
        )
        return try await self.createBackup(input, logger: logger)
    }

    /// Creates an Amazon FSx for Lustre data repository association (DRA). A data repository association is a link between a directory on the file system and an Amazon S3 bucket or prefix. You can have a maximum of 8 data repository associations on a file system. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type. Each data repository association must have a unique Amazon FSx file system directory and a unique S3 bucket or prefix associated with it. You can configure a data repository association for automatic import only, for automatic export only, or for both. To learn more about linking a data repository to your file system, see  Linking your file system to an S3 bucket.   CreateDataRepositoryAssociation isn't supported on Amazon File Cache resources. To create a DRA on Amazon File Cache, use the CreateFileCache operation.
    @Sendable
    @inlinable
    public func createDataRepositoryAssociation(_ input: CreateDataRepositoryAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDataRepositoryAssociationResponse {
        try await self.client.execute(
            operation: "CreateDataRepositoryAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon FSx for Lustre data repository association (DRA). A data repository association is a link between a directory on the file system and an Amazon S3 bucket or prefix. You can have a maximum of 8 data repository associations on a file system. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type. Each data repository association must have a unique Amazon FSx file system directory and a unique S3 bucket or prefix associated with it. You can configure a data repository association for automatic import only, for automatic export only, or for both. To learn more about linking a data repository to your file system, see  Linking your file system to an S3 bucket.   CreateDataRepositoryAssociation isn't supported on Amazon File Cache resources. To create a DRA on Amazon File Cache, use the CreateFileCache operation.
    ///
    /// Parameters:
    ///   - batchImportMetaDataOnCreate: Set to true to run an import data repository task to import metadata from the data repository to the file system after the data repository association is created. Default is false.
    ///   - clientRequestToken: 
    ///   - dataRepositoryPath: The path to the Amazon S3 data repository that will be linked to the file system. The path can be an S3 bucket or prefix in the format s3://bucket-name/prefix/ (where prefix is optional). This path specifies where in the S3 data repository files will be imported from or exported to.
    ///   - fileSystemId: 
    ///   - fileSystemPath: A path on the file system that points to a high-level directory (such as /ns1/) or subdirectory (such as /ns1/subdir/) that will be mapped 1-1 with DataRepositoryPath. The leading forward slash in the name is required. Two data repository associations cannot have overlapping file system paths. For example, if a data repository is associated with file system path /ns1/, then you cannot link another data repository with file system path /ns1/ns2. This path specifies where in your file system files will be exported from or imported to. This file system directory can be linked to only one Amazon S3 bucket, and no other S3 bucket can be linked to the directory.  If you specify only a forward slash (/) as the file system path, you can link only one data repository to the file system. You can only specify "/" as the file system path for the first data repository associated with a file system.
    ///   - importedFileChunkSize: For files imported from a data repository, this value determines the stripe count and maximum amount of data per file (in MiB) stored on a single physical disk. The maximum number of disks that a single file can be striped across is limited by the total number of disks that make up the file system. The default chunk size is 1,024 MiB (1 GiB) and can go as high as 512,000 MiB (500 GiB). Amazon S3 objects have a maximum size of 5 TB.
    ///   - s3: The configuration for an Amazon S3 data repository linked to an Amazon FSx Lustre file system with a data repository association. The configuration defines which file events (new, changed, or deleted files or directories) are automatically imported from the linked data repository to the file system or automatically exported from the file system to the data repository.
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataRepositoryAssociation(
        batchImportMetaDataOnCreate: Bool? = nil,
        clientRequestToken: String? = CreateDataRepositoryAssociationRequest.idempotencyToken(),
        dataRepositoryPath: String? = nil,
        fileSystemId: String? = nil,
        fileSystemPath: String? = nil,
        importedFileChunkSize: Int? = nil,
        s3: S3DataRepositoryConfiguration? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDataRepositoryAssociationResponse {
        let input = CreateDataRepositoryAssociationRequest(
            batchImportMetaDataOnCreate: batchImportMetaDataOnCreate, 
            clientRequestToken: clientRequestToken, 
            dataRepositoryPath: dataRepositoryPath, 
            fileSystemId: fileSystemId, 
            fileSystemPath: fileSystemPath, 
            importedFileChunkSize: importedFileChunkSize, 
            s3: s3, 
            tags: tags
        )
        return try await self.createDataRepositoryAssociation(input, logger: logger)
    }

    /// Creates an Amazon FSx for Lustre data repository task. A CreateDataRepositoryTask operation will fail if a data repository is not linked to the FSx file system. You use import and export data repository tasks to perform bulk operations between your FSx for Lustre file system and its linked data repositories. An example of a data repository task is exporting any data and metadata changes, including POSIX metadata, to files, directories, and symbolic links (symlinks) from your FSx file system to a linked data repository. You use release data repository tasks to release data from your file system for files that are exported to S3. The metadata of released files remains on the file system so users or applications can still access released files by reading the files again, which will restore data from Amazon S3 to the FSx for Lustre file system. To learn more about data repository tasks, see  Data Repository Tasks.  To learn more about linking a data repository to your file system, see  Linking your file system to an S3 bucket.
    @Sendable
    @inlinable
    public func createDataRepositoryTask(_ input: CreateDataRepositoryTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDataRepositoryTaskResponse {
        try await self.client.execute(
            operation: "CreateDataRepositoryTask", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon FSx for Lustre data repository task. A CreateDataRepositoryTask operation will fail if a data repository is not linked to the FSx file system. You use import and export data repository tasks to perform bulk operations between your FSx for Lustre file system and its linked data repositories. An example of a data repository task is exporting any data and metadata changes, including POSIX metadata, to files, directories, and symbolic links (symlinks) from your FSx file system to a linked data repository. You use release data repository tasks to release data from your file system for files that are exported to S3. The metadata of released files remains on the file system so users or applications can still access released files by reading the files again, which will restore data from Amazon S3 to the FSx for Lustre file system. To learn more about data repository tasks, see  Data Repository Tasks.  To learn more about linking a data repository to your file system, see  Linking your file system to an S3 bucket.
    ///
    /// Parameters:
    ///   - capacityToRelease: Specifies the amount of data to release, in GiB, by an Amazon File Cache AUTO_RELEASE_DATA task that automatically releases files from the cache.
    ///   - clientRequestToken: 
    ///   - fileSystemId: 
    ///   - paths: A list of paths for the data repository task to use when the task is processed. If a path that you provide isn't valid, the task fails. If you don't provide paths, the default behavior is to export all files to S3 (for export tasks), import all files from S3 (for import tasks), or release all exported files that meet the last accessed time criteria (for release tasks).   For export tasks, the list contains paths on the FSx for Lustre file system from which the files are exported to the Amazon S3 bucket. The default path is the file system root directory. The paths you provide need to be relative to the mount point of the file system. If the mount point is /mnt/fsx and /mnt/fsx/path1 is a directory or file on the file system you want to export, then the path to provide is path1.   For import tasks, the list contains paths in the Amazon S3 bucket from which POSIX metadata changes are imported to the FSx for Lustre file system. The path can be an S3 bucket or prefix in the format s3://bucket-name/prefix (where prefix is optional).   For release tasks, the list contains directory or file paths on the FSx for Lustre file system from which to release exported files. If a directory is specified, files within the directory are released. If a file path is specified, only that file is released. To release all exported files in the file system, specify a forward slash (/) as the path.  A file must also meet the last accessed time criteria specified in  for the file to be released.
    ///   - releaseConfiguration: The configuration that specifies the last accessed time criteria for files that will be released from an Amazon FSx for Lustre file system.
    ///   - report: Defines whether or not Amazon FSx provides a CompletionReport once the task has completed.  A CompletionReport provides a detailed  report on the files that Amazon FSx processed that meet the criteria specified by the  Scope parameter. For more information, see  Working with Task Completion Reports.
    ///   - tags: 
    ///   - type: Specifies the type of data repository task to create.    EXPORT_TO_REPOSITORY tasks export from your Amazon FSx for Lustre file system to a linked data repository.    IMPORT_METADATA_FROM_REPOSITORY tasks import metadata changes from a linked S3 bucket to your Amazon FSx for Lustre file system.    RELEASE_DATA_FROM_FILESYSTEM tasks release files in your Amazon FSx for Lustre file system that have been exported to a linked S3 bucket and that meet your specified release criteria.    AUTO_RELEASE_DATA tasks automatically release files from an Amazon File Cache resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataRepositoryTask(
        capacityToRelease: Int64? = nil,
        clientRequestToken: String? = CreateDataRepositoryTaskRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        paths: [String]? = nil,
        releaseConfiguration: ReleaseConfiguration? = nil,
        report: CompletionReport? = nil,
        tags: [Tag]? = nil,
        type: DataRepositoryTaskType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDataRepositoryTaskResponse {
        let input = CreateDataRepositoryTaskRequest(
            capacityToRelease: capacityToRelease, 
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            paths: paths, 
            releaseConfiguration: releaseConfiguration, 
            report: report, 
            tags: tags, 
            type: type
        )
        return try await self.createDataRepositoryTask(input, logger: logger)
    }

    /// Creates a new Amazon File Cache resource. You can use this operation with a client request token in the request that Amazon File Cache uses to ensure idempotent creation.  If a cache with the specified client request token exists and the parameters match, CreateFileCache returns the description of the existing cache. If a cache with the specified client request token exists and the parameters don't match, this call returns IncompatibleParameterError. If a file cache with the specified client request token doesn't exist, CreateFileCache does the following:    Creates a new, empty Amazon File Cache resource with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the cache in JSON format.    The CreateFileCache call returns while the cache's lifecycle state is still CREATING. You can check the cache creation status by calling the DescribeFileCaches operation, which returns the cache state along with other information.
    @Sendable
    @inlinable
    public func createFileCache(_ input: CreateFileCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFileCacheResponse {
        try await self.client.execute(
            operation: "CreateFileCache", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Amazon File Cache resource. You can use this operation with a client request token in the request that Amazon File Cache uses to ensure idempotent creation.  If a cache with the specified client request token exists and the parameters match, CreateFileCache returns the description of the existing cache. If a cache with the specified client request token exists and the parameters don't match, this call returns IncompatibleParameterError. If a file cache with the specified client request token doesn't exist, CreateFileCache does the following:    Creates a new, empty Amazon File Cache resource with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the cache in JSON format.    The CreateFileCache call returns while the cache's lifecycle state is still CREATING. You can check the cache creation status by calling the DescribeFileCaches operation, which returns the cache state along with other information.
    ///
    /// Parameters:
    ///   - clientRequestToken: An idempotency token for resource creation, in a string of up to 63 ASCII characters. This token is automatically filled on your behalf when you use the Command Line Interface (CLI) or an Amazon Web Services SDK. By using the idempotent operation, you can retry a CreateFileCache operation without the risk of creating an extra cache. This approach can be useful when an initial call fails in a way that makes it unclear whether a cache was created. Examples are if a transport level timeout occurred, or your connection was reset. If you use the same client request token and the initial call created a cache, the client receives success as long as the parameters are the same.
    ///   - copyTagsToDataRepositoryAssociations: A boolean flag indicating whether tags for the cache should be copied to data repository associations. This value defaults to false.
    ///   - dataRepositoryAssociations: A list of up to 8 configurations for data repository associations (DRAs) to be created during the cache creation. The DRAs link the cache to either an Amazon S3 data repository or a Network File System (NFS) data repository that supports the NFSv3 protocol. The DRA configurations must meet the following requirements:   All configurations on the list must be of the same data repository type, either all S3 or all NFS. A cache can't link to different data repository types at the same time.   An NFS DRA must link to an NFS file system that supports the NFSv3 protocol.   DRA automatic import and automatic export is not supported.
    ///   - fileCacheType: The type of cache that you're creating, which must be LUSTRE.
    ///   - fileCacheTypeVersion: Sets the Lustre version for the cache that you're creating, which must be 2.12.
    ///   - kmsKeyId: Specifies the ID of the Key Management Service (KMS) key to use for encrypting data on an Amazon File Cache. If a KmsKeyId isn't specified, the Amazon FSx-managed KMS key for your account is used. For more information, see Encrypt in the Key Management Service API Reference.
    ///   - lustreConfiguration: The configuration for the Amazon File Cache resource being created.
    ///   - securityGroupIds: A list of IDs specifying the security groups to apply to all network interfaces created for Amazon File Cache access. This list isn't returned in later requests to describe the cache.
    ///   - storageCapacity: The storage capacity of the cache in gibibytes (GiB). Valid values are 1200 GiB, 2400 GiB, and increments of 2400 GiB.
    ///   - subnetIds: 
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createFileCache(
        clientRequestToken: String? = CreateFileCacheRequest.idempotencyToken(),
        copyTagsToDataRepositoryAssociations: Bool? = nil,
        dataRepositoryAssociations: [FileCacheDataRepositoryAssociation]? = nil,
        fileCacheType: FileCacheType? = nil,
        fileCacheTypeVersion: String? = nil,
        kmsKeyId: String? = nil,
        lustreConfiguration: CreateFileCacheLustreConfiguration? = nil,
        securityGroupIds: [String]? = nil,
        storageCapacity: Int? = nil,
        subnetIds: [String]? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFileCacheResponse {
        let input = CreateFileCacheRequest(
            clientRequestToken: clientRequestToken, 
            copyTagsToDataRepositoryAssociations: copyTagsToDataRepositoryAssociations, 
            dataRepositoryAssociations: dataRepositoryAssociations, 
            fileCacheType: fileCacheType, 
            fileCacheTypeVersion: fileCacheTypeVersion, 
            kmsKeyId: kmsKeyId, 
            lustreConfiguration: lustreConfiguration, 
            securityGroupIds: securityGroupIds, 
            storageCapacity: storageCapacity, 
            subnetIds: subnetIds, 
            tags: tags
        )
        return try await self.createFileCache(input, logger: logger)
    }

    /// Creates a new, empty Amazon FSx file system. You can create the following supported  Amazon FSx file systems using the CreateFileSystem API operation:   Amazon FSx for Lustre   Amazon FSx for NetApp ONTAP   Amazon FSx for OpenZFS   Amazon FSx for Windows File Server   This operation requires a client request token in the request that Amazon FSx uses to ensure idempotent creation. This means that calling the operation multiple times with the same client request token has no effect. By using the idempotent operation, you can retry a CreateFileSystem operation without the risk of creating an extra file system. This approach can be useful when an initial call fails in a way that makes it unclear whether a file system was created. Examples are if a transport level timeout occurred, or your connection was reset. If you use the same client request token and the initial call created a file system, the client receives success as long as the parameters are the same. If a file system with the specified client request token exists and the parameters match, CreateFileSystem returns the description of the existing file system. If a file system with the specified client request token exists and the parameters don't match, this call returns IncompatibleParameterError. If a file system with the specified client request token doesn't exist, CreateFileSystem does the following:   Creates a new, empty Amazon FSx file system with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the file system in JSON format.    The CreateFileSystem call returns while the file system's lifecycle state is still CREATING. You can check the file-system creation status by calling the DescribeFileSystems operation, which returns the file system state along with other information.
    @Sendable
    @inlinable
    public func createFileSystem(_ input: CreateFileSystemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFileSystemResponse {
        try await self.client.execute(
            operation: "CreateFileSystem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new, empty Amazon FSx file system. You can create the following supported  Amazon FSx file systems using the CreateFileSystem API operation:   Amazon FSx for Lustre   Amazon FSx for NetApp ONTAP   Amazon FSx for OpenZFS   Amazon FSx for Windows File Server   This operation requires a client request token in the request that Amazon FSx uses to ensure idempotent creation. This means that calling the operation multiple times with the same client request token has no effect. By using the idempotent operation, you can retry a CreateFileSystem operation without the risk of creating an extra file system. This approach can be useful when an initial call fails in a way that makes it unclear whether a file system was created. Examples are if a transport level timeout occurred, or your connection was reset. If you use the same client request token and the initial call created a file system, the client receives success as long as the parameters are the same. If a file system with the specified client request token exists and the parameters match, CreateFileSystem returns the description of the existing file system. If a file system with the specified client request token exists and the parameters don't match, this call returns IncompatibleParameterError. If a file system with the specified client request token doesn't exist, CreateFileSystem does the following:   Creates a new, empty Amazon FSx file system with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the file system in JSON format.    The CreateFileSystem call returns while the file system's lifecycle state is still CREATING. You can check the file-system creation status by calling the DescribeFileSystems operation, which returns the file system state along with other information.
    ///
    /// Parameters:
    ///   - clientRequestToken: A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent creation. This string is automatically filled on your behalf when you use the Command Line Interface (CLI) or an Amazon Web Services SDK.
    ///   - fileSystemType: The type of Amazon FSx file system to create. Valid values are WINDOWS, LUSTRE, ONTAP, and OPENZFS.
    ///   - fileSystemTypeVersion: For FSx for Lustre file systems, sets the Lustre version for the file system that you're creating. Valid values are 2.10, 2.12, and 2.15:    2.10 is supported by the Scratch and Persistent_1 Lustre  deployment types.    2.12 is supported by all Lustre deployment types, except for PERSISTENT_2 with a metadata configuration mode.    2.15 is supported by all Lustre deployment types and is recommended for all new file systems.   Default value is 2.10, except for the following deployments:   Default value is 2.12 when DeploymentType is set to  PERSISTENT_2 without a metadata configuration mode.   Default value is 2.15 when DeploymentType is set to  PERSISTENT_2 with a metadata configuration mode.
    ///   - kmsKeyId: 
    ///   - lustreConfiguration: 
    ///   - networkType: The network type of the Amazon FSx file system that you are creating. Valid values are IPV4 (which supports IPv4 only) and DUAL (for dual-stack mode, which supports both IPv4 and IPv6). The default is IPV4. Supported for FSx for OpenZFS, FSx for ONTAP, and FSx for Windows File Server file systems.
    ///   - ontapConfiguration: 
    ///   - openZFSConfiguration: The OpenZFS configuration for the file system that's being created.
    ///   - securityGroupIds: A list of IDs specifying the security groups to apply to all network interfaces created for file system access. This list isn't returned in later requests to describe the file system.  You must specify a security group if you are creating a Multi-AZ  FSx for ONTAP file system in a VPC subnet that has been shared with you.
    ///   - storageCapacity: Sets the storage capacity of the file system that you're creating, in gibibytes (GiB).  FSx for Lustre file systems - The amount of storage capacity that you can configure depends on the value that you set for StorageType and the Lustre DeploymentType, as follows:   For SCRATCH_2, PERSISTENT_2, and PERSISTENT_1 deployment types  using SSD storage type, the valid values are 1200 GiB, 2400 GiB, and increments of 2400 GiB.   For PERSISTENT_1 HDD file systems, valid values are increments of 6000 GiB for  12 MB/s/TiB file systems and increments of 1800 GiB for 40 MB/s/TiB file systems.   For SCRATCH_1 deployment type, valid values are  1200 GiB, 2400 GiB, and increments of 3600 GiB.    FSx for ONTAP file systems - The amount of storage capacity  that you can configure depends on the value of the HAPairs property. The minimum value is calculated as 1,024 * HAPairs and the maximum is calculated as 524,288 * HAPairs.   FSx for OpenZFS file systems - The amount of storage capacity that  you can configure is from 64 GiB up to 524,288 GiB (512 TiB).  FSx for Windows File Server file systems - The amount of storage capacity that you can configure depends on the value that you set for StorageType as follows:   For SSD storage, valid values are 32 GiB-65,536 GiB (64 TiB).   For HDD storage, valid values are 2000 GiB-65,536 GiB (64 TiB).
    ///   - storageType: Sets the storage class for the file system that you're creating. Valid values are SSD, HDD, and INTELLIGENT_TIERING.   Set to SSD to use solid state drive storage. SSD is supported on all Windows, Lustre, ONTAP, and OpenZFS deployment types.   Set to HDD to use hard disk drive storage, which is supported on  SINGLE_AZ_2 and MULTI_AZ_1 Windows file system deployment types, and on PERSISTENT_1 Lustre file system deployment types.   Set to INTELLIGENT_TIERING to use fully elastic, intelligently-tiered storage. Intelligent-Tiering is only available for OpenZFS file systems with the Multi-AZ deployment type and for Lustre file systems with the Persistent_2 deployment type.   Default value is SSD. For more information, see  Storage type options in the FSx for Windows File Server User Guide, FSx for Lustre storage classes in the FSx for Lustre User Guide, and Working with Intelligent-Tiering in the Amazon FSx for OpenZFS User Guide.
    ///   - subnetIds: Specifies the IDs of the subnets that the file system will be accessible from. For Windows and ONTAP MULTI_AZ_1 deployment types,provide exactly two subnet IDs, one for the preferred file server and one for the standby file server. You specify one of these subnets as the preferred subnet using the WindowsConfiguration > PreferredSubnetID or OntapConfiguration > PreferredSubnetID properties. For more information about Multi-AZ file system configuration, see  Availability and durability: Single-AZ and Multi-AZ file systems in the Amazon FSx for Windows User Guide and  Availability and durability in the Amazon FSx for ONTAP User Guide. For Windows SINGLE_AZ_1 and SINGLE_AZ_2 and all Lustre  deployment types, provide exactly one subnet ID. The file server is launched in that subnet's Availability Zone.
    ///   - tags: The tags to apply to the file system that's being created. The key value of the Name tag appears in the console as the file system name.
    ///   - windowsConfiguration: The Microsoft Windows configuration for the file system that's being created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFileSystem(
        clientRequestToken: String? = CreateFileSystemRequest.idempotencyToken(),
        fileSystemType: FileSystemType? = nil,
        fileSystemTypeVersion: String? = nil,
        kmsKeyId: String? = nil,
        lustreConfiguration: CreateFileSystemLustreConfiguration? = nil,
        networkType: NetworkType? = nil,
        ontapConfiguration: CreateFileSystemOntapConfiguration? = nil,
        openZFSConfiguration: CreateFileSystemOpenZFSConfiguration? = nil,
        securityGroupIds: [String]? = nil,
        storageCapacity: Int? = nil,
        storageType: StorageType? = nil,
        subnetIds: [String]? = nil,
        tags: [Tag]? = nil,
        windowsConfiguration: CreateFileSystemWindowsConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFileSystemResponse {
        let input = CreateFileSystemRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemType: fileSystemType, 
            fileSystemTypeVersion: fileSystemTypeVersion, 
            kmsKeyId: kmsKeyId, 
            lustreConfiguration: lustreConfiguration, 
            networkType: networkType, 
            ontapConfiguration: ontapConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            securityGroupIds: securityGroupIds, 
            storageCapacity: storageCapacity, 
            storageType: storageType, 
            subnetIds: subnetIds, 
            tags: tags, 
            windowsConfiguration: windowsConfiguration
        )
        return try await self.createFileSystem(input, logger: logger)
    }

    /// Creates a new Amazon FSx for Lustre, Amazon FSx for Windows File Server, or Amazon FSx for OpenZFS file system from an existing Amazon FSx backup. If a file system with the specified client request token exists and the parameters match, this operation returns the description of the file system. If a file system with the specified client request token exists but the parameters don't match, this call returns IncompatibleParameterError. If a file system with the specified client request token doesn't exist, this operation does the following:   Creates a new Amazon FSx file system from backup with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the file system.   Parameters like the Active Directory, default share name, automatic backup, and backup settings default to the parameters of the file system that was backed up, unless overridden. You can explicitly supply other settings. By using the idempotent operation, you can retry a CreateFileSystemFromBackup call without the risk of creating an extra file system. This approach can be useful when an initial call fails in a way that makes it unclear whether a file system was created. Examples are if a transport level timeout occurred, or your connection was reset. If you use the same client request token and the initial call created a file system, the client receives a success message as long as the parameters are the same.  The CreateFileSystemFromBackup call returns while the file system's lifecycle state is still CREATING. You can check the file-system creation status by calling the  DescribeFileSystems operation, which returns the file system state along with other information.
    @Sendable
    @inlinable
    public func createFileSystemFromBackup(_ input: CreateFileSystemFromBackupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFileSystemFromBackupResponse {
        try await self.client.execute(
            operation: "CreateFileSystemFromBackup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Amazon FSx for Lustre, Amazon FSx for Windows File Server, or Amazon FSx for OpenZFS file system from an existing Amazon FSx backup. If a file system with the specified client request token exists and the parameters match, this operation returns the description of the file system. If a file system with the specified client request token exists but the parameters don't match, this call returns IncompatibleParameterError. If a file system with the specified client request token doesn't exist, this operation does the following:   Creates a new Amazon FSx file system from backup with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the file system.   Parameters like the Active Directory, default share name, automatic backup, and backup settings default to the parameters of the file system that was backed up, unless overridden. You can explicitly supply other settings. By using the idempotent operation, you can retry a CreateFileSystemFromBackup call without the risk of creating an extra file system. This approach can be useful when an initial call fails in a way that makes it unclear whether a file system was created. Examples are if a transport level timeout occurred, or your connection was reset. If you use the same client request token and the initial call created a file system, the client receives a success message as long as the parameters are the same.  The CreateFileSystemFromBackup call returns while the file system's lifecycle state is still CREATING. You can check the file-system creation status by calling the  DescribeFileSystems operation, which returns the file system state along with other information.
    ///
    /// Parameters:
    ///   - backupId: 
    ///   - clientRequestToken: A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent creation. This string is automatically filled on your behalf when you use the Command Line Interface (CLI) or an Amazon Web Services SDK.
    ///   - fileSystemTypeVersion: Sets the version for the Amazon FSx for Lustre file system that you're creating from a backup. Valid values are 2.10, 2.12, and 2.15. You can enter a Lustre version that is newer than the backup's FileSystemTypeVersion setting. If you don't enter a newer Lustre version, it defaults to the backup's setting.
    ///   - kmsKeyId: 
    ///   - lustreConfiguration: 
    ///   - networkType: Sets the network type for the Amazon FSx for OpenZFS file system that you're creating from a backup.
    ///   - openZFSConfiguration: The OpenZFS configuration for the file system that's being created.
    ///   - securityGroupIds: A list of IDs for the security groups that apply to the specified network interfaces created for file system access. These security groups apply to all network interfaces. This value isn't returned in later DescribeFileSystem requests.
    ///   - storageCapacity: Sets the storage capacity of the OpenZFS file system that you're creating from a backup, in gibibytes (GiB). Valid values are from 64 GiB up to 524,288 GiB (512 TiB). However, the value that you specify must be equal to or greater than the backup's storage capacity value. If you don't use the StorageCapacity parameter, the default is the backup's StorageCapacity value. If used to create a file system other than OpenZFS, you must provide a value that matches the backup's StorageCapacity value. If you provide any other value, Amazon FSx responds with an HTTP status code 400 Bad Request.
    ///   - storageType: Sets the storage type for the Windows, OpenZFS, or Lustre file system that you're creating from a backup. Valid values are SSD, HDD, and INTELLIGENT_TIERING.   Set to SSD to use solid state drive storage. SSD is supported on all Windows and OpenZFS deployment types.   Set to HDD to use hard disk drive storage.  HDD is supported on SINGLE_AZ_2 and MULTI_AZ_1 FSx for Windows File Server file system deployment types.   Set to INTELLIGENT_TIERING to use fully elastic, intelligently-tiered storage. Intelligent-Tiering is only available for OpenZFS file systems with the Multi-AZ deployment type and for Lustre file systems with the Persistent_2 deployment type.   The default value is SSD.   HDD and SSD storage types have different minimum storage capacity requirements.  A restored file system's storage capacity is tied to the file system that was backed up.  You can create a file system that uses HDD storage from a backup of a file system that  used SSD storage if the original SSD file system had a storage capacity of at least 2000 GiB.
    ///   - subnetIds: Specifies the IDs of the subnets that the file system will be accessible from. For Windows MULTI_AZ_1  file system deployment types, provide exactly two subnet IDs, one for the preferred file server  and one for the standby file server. You specify one of these subnets as the preferred subnet  using the WindowsConfiguration > PreferredSubnetID property. Windows SINGLE_AZ_1 and SINGLE_AZ_2 file system deployment types, Lustre file systems, and OpenZFS file systems provide exactly one subnet ID. The file server is launched in that subnet's Availability Zone.
    ///   - tags: The tags to be applied to the file system at file system creation. The key value of the Name tag appears in the console as the file system name.
    ///   - windowsConfiguration: The configuration for this Microsoft Windows file system.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFileSystemFromBackup(
        backupId: String? = nil,
        clientRequestToken: String? = CreateFileSystemFromBackupRequest.idempotencyToken(),
        fileSystemTypeVersion: String? = nil,
        kmsKeyId: String? = nil,
        lustreConfiguration: CreateFileSystemLustreConfiguration? = nil,
        networkType: NetworkType? = nil,
        openZFSConfiguration: CreateFileSystemOpenZFSConfiguration? = nil,
        securityGroupIds: [String]? = nil,
        storageCapacity: Int? = nil,
        storageType: StorageType? = nil,
        subnetIds: [String]? = nil,
        tags: [Tag]? = nil,
        windowsConfiguration: CreateFileSystemWindowsConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFileSystemFromBackupResponse {
        let input = CreateFileSystemFromBackupRequest(
            backupId: backupId, 
            clientRequestToken: clientRequestToken, 
            fileSystemTypeVersion: fileSystemTypeVersion, 
            kmsKeyId: kmsKeyId, 
            lustreConfiguration: lustreConfiguration, 
            networkType: networkType, 
            openZFSConfiguration: openZFSConfiguration, 
            securityGroupIds: securityGroupIds, 
            storageCapacity: storageCapacity, 
            storageType: storageType, 
            subnetIds: subnetIds, 
            tags: tags, 
            windowsConfiguration: windowsConfiguration
        )
        return try await self.createFileSystemFromBackup(input, logger: logger)
    }

    /// Creates a snapshot of an existing Amazon FSx for OpenZFS volume. With snapshots, you can easily undo file changes and compare file versions by restoring the volume to a previous version. If a snapshot with the specified client request token exists, and the parameters match, this operation returns the description of the existing snapshot. If a snapshot with the specified client request token exists, and the parameters don't match, this operation returns IncompatibleParameterError. If a snapshot with the specified client request token doesn't exist, CreateSnapshot does the following:   Creates a new OpenZFS snapshot with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the snapshot.   By using the idempotent operation, you can retry a CreateSnapshot operation without the risk of creating an extra snapshot. This approach can be useful when an initial call fails in a way that makes it unclear whether a snapshot was created. If you use the same client request token and the initial call created a snapshot, the operation returns a successful result because all the parameters are the same. The CreateSnapshot operation returns while the snapshot's lifecycle state is still CREATING. You can check the snapshot creation status by calling the DescribeSnapshots operation, which returns the snapshot state along with other information.
    @Sendable
    @inlinable
    public func createSnapshot(_ input: CreateSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSnapshotResponse {
        try await self.client.execute(
            operation: "CreateSnapshot", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a snapshot of an existing Amazon FSx for OpenZFS volume. With snapshots, you can easily undo file changes and compare file versions by restoring the volume to a previous version. If a snapshot with the specified client request token exists, and the parameters match, this operation returns the description of the existing snapshot. If a snapshot with the specified client request token exists, and the parameters don't match, this operation returns IncompatibleParameterError. If a snapshot with the specified client request token doesn't exist, CreateSnapshot does the following:   Creates a new OpenZFS snapshot with an assigned ID, and an initial lifecycle state of CREATING.   Returns the description of the snapshot.   By using the idempotent operation, you can retry a CreateSnapshot operation without the risk of creating an extra snapshot. This approach can be useful when an initial call fails in a way that makes it unclear whether a snapshot was created. If you use the same client request token and the initial call created a snapshot, the operation returns a successful result because all the parameters are the same. The CreateSnapshot operation returns while the snapshot's lifecycle state is still CREATING. You can check the snapshot creation status by calling the DescribeSnapshots operation, which returns the snapshot state along with other information.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: The name of the snapshot.
    ///   - tags: 
    ///   - volumeId: The ID of the volume that you are taking a snapshot of.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSnapshot(
        clientRequestToken: String? = CreateSnapshotRequest.idempotencyToken(),
        name: String? = nil,
        tags: [Tag]? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSnapshotResponse {
        let input = CreateSnapshotRequest(
            clientRequestToken: clientRequestToken, 
            name: name, 
            tags: tags, 
            volumeId: volumeId
        )
        return try await self.createSnapshot(input, logger: logger)
    }

    /// Creates a storage virtual machine (SVM) for an Amazon FSx for ONTAP file system.
    @Sendable
    @inlinable
    public func createStorageVirtualMachine(_ input: CreateStorageVirtualMachineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateStorageVirtualMachineResponse {
        try await self.client.execute(
            operation: "CreateStorageVirtualMachine", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a storage virtual machine (SVM) for an Amazon FSx for ONTAP file system.
    ///
    /// Parameters:
    ///   - activeDirectoryConfiguration: Describes the self-managed Microsoft Active Directory to which you want to join the SVM.  Joining an Active Directory provides user authentication and access control for SMB clients,  including Microsoft Windows and macOS clients accessing the file system.
    ///   - clientRequestToken: 
    ///   - fileSystemId: 
    ///   - name: The name of the SVM.
    ///   - rootVolumeSecurityStyle: The security style of the root volume of the SVM. Specify one of the following values:    UNIX if the file system is managed by a UNIX administrator, the majority of users are NFS clients, and an application accessing the data uses a UNIX user as the service account.    NTFS if the file system is managed by a Microsoft Windows administrator, the majority of users are SMB clients, and an application accessing the data uses a Microsoft Windows user as the service account.    MIXED This is an advanced setting. For more information, see  Volume security style in the Amazon FSx for NetApp ONTAP User Guide.
    ///   - svmAdminPassword: The password to use when managing the SVM using the NetApp ONTAP CLI or REST API. If you do not specify a password, you can still use the file system's fsxadmin user to manage the SVM.
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createStorageVirtualMachine(
        activeDirectoryConfiguration: CreateSvmActiveDirectoryConfiguration? = nil,
        clientRequestToken: String? = CreateStorageVirtualMachineRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        name: String? = nil,
        rootVolumeSecurityStyle: StorageVirtualMachineRootVolumeSecurityStyle? = nil,
        svmAdminPassword: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateStorageVirtualMachineResponse {
        let input = CreateStorageVirtualMachineRequest(
            activeDirectoryConfiguration: activeDirectoryConfiguration, 
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            name: name, 
            rootVolumeSecurityStyle: rootVolumeSecurityStyle, 
            svmAdminPassword: svmAdminPassword, 
            tags: tags
        )
        return try await self.createStorageVirtualMachine(input, logger: logger)
    }

    /// Creates an FSx for ONTAP or Amazon FSx for OpenZFS storage volume.
    @Sendable
    @inlinable
    public func createVolume(_ input: CreateVolumeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateVolumeResponse {
        try await self.client.execute(
            operation: "CreateVolume", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an FSx for ONTAP or Amazon FSx for OpenZFS storage volume.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: Specifies the name of the volume that you're creating.
    ///   - ontapConfiguration: Specifies the configuration to use when creating the ONTAP volume.
    ///   - openZFSConfiguration: Specifies the configuration to use when creating the OpenZFS volume.
    ///   - tags: 
    ///   - volumeType: Specifies the type of volume to create; ONTAP and OPENZFS are the only valid volume types.
    ///   - logger: Logger use during operation
    @inlinable
    public func createVolume(
        clientRequestToken: String? = CreateVolumeRequest.idempotencyToken(),
        name: String? = nil,
        ontapConfiguration: CreateOntapVolumeConfiguration? = nil,
        openZFSConfiguration: CreateOpenZFSVolumeConfiguration? = nil,
        tags: [Tag]? = nil,
        volumeType: VolumeType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateVolumeResponse {
        let input = CreateVolumeRequest(
            clientRequestToken: clientRequestToken, 
            name: name, 
            ontapConfiguration: ontapConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            tags: tags, 
            volumeType: volumeType
        )
        return try await self.createVolume(input, logger: logger)
    }

    /// Creates a new Amazon FSx for NetApp ONTAP volume from an existing Amazon FSx volume backup.
    @Sendable
    @inlinable
    public func createVolumeFromBackup(_ input: CreateVolumeFromBackupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateVolumeFromBackupResponse {
        try await self.client.execute(
            operation: "CreateVolumeFromBackup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Amazon FSx for NetApp ONTAP volume from an existing Amazon FSx volume backup.
    ///
    /// Parameters:
    ///   - backupId: 
    ///   - clientRequestToken: 
    ///   - name: The name of the new volume you're creating.
    ///   - ontapConfiguration: Specifies the configuration of the ONTAP volume that you are creating.
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createVolumeFromBackup(
        backupId: String? = nil,
        clientRequestToken: String? = CreateVolumeFromBackupRequest.idempotencyToken(),
        name: String? = nil,
        ontapConfiguration: CreateOntapVolumeConfiguration? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateVolumeFromBackupResponse {
        let input = CreateVolumeFromBackupRequest(
            backupId: backupId, 
            clientRequestToken: clientRequestToken, 
            name: name, 
            ontapConfiguration: ontapConfiguration, 
            tags: tags
        )
        return try await self.createVolumeFromBackup(input, logger: logger)
    }

    /// Deletes an Amazon FSx backup. After deletion, the backup no longer exists, and its data is gone. The DeleteBackup call returns instantly. The backup won't show up in later DescribeBackups calls.  The data in a deleted backup is also deleted and can't be recovered by any means.
    @Sendable
    @inlinable
    public func deleteBackup(_ input: DeleteBackupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBackupResponse {
        try await self.client.execute(
            operation: "DeleteBackup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon FSx backup. After deletion, the backup no longer exists, and its data is gone. The DeleteBackup call returns instantly. The backup won't show up in later DescribeBackups calls.  The data in a deleted backup is also deleted and can't be recovered by any means.
    ///
    /// Parameters:
    ///   - backupId: The ID of the backup that you want to delete.
    ///   - clientRequestToken: A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent deletion. This parameter is automatically filled on your behalf when using the CLI or SDK.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackup(
        backupId: String? = nil,
        clientRequestToken: String? = DeleteBackupRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBackupResponse {
        let input = DeleteBackupRequest(
            backupId: backupId, 
            clientRequestToken: clientRequestToken
        )
        return try await self.deleteBackup(input, logger: logger)
    }

    /// Deletes a data repository association on an Amazon FSx for Lustre file system. Deleting the data repository association unlinks the file system from the Amazon S3 bucket. When deleting a data repository association, you have the option of deleting the data in the file system that corresponds to the data repository association. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type.
    @Sendable
    @inlinable
    public func deleteDataRepositoryAssociation(_ input: DeleteDataRepositoryAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDataRepositoryAssociationResponse {
        try await self.client.execute(
            operation: "DeleteDataRepositoryAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a data repository association on an Amazon FSx for Lustre file system. Deleting the data repository association unlinks the file system from the Amazon S3 bucket. When deleting a data repository association, you have the option of deleting the data in the file system that corresponds to the data repository association. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type.
    ///
    /// Parameters:
    ///   - associationId: The ID of the data repository association that you want to delete.
    ///   - clientRequestToken: 
    ///   - deleteDataInFileSystem: Set to true to delete the data in the file system that corresponds to the data repository association.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDataRepositoryAssociation(
        associationId: String? = nil,
        clientRequestToken: String? = DeleteDataRepositoryAssociationRequest.idempotencyToken(),
        deleteDataInFileSystem: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDataRepositoryAssociationResponse {
        let input = DeleteDataRepositoryAssociationRequest(
            associationId: associationId, 
            clientRequestToken: clientRequestToken, 
            deleteDataInFileSystem: deleteDataInFileSystem
        )
        return try await self.deleteDataRepositoryAssociation(input, logger: logger)
    }

    /// Deletes an Amazon File Cache resource. After deletion, the cache no longer exists, and its data is gone. The DeleteFileCache operation returns while the cache has the DELETING status. You can check the cache deletion status by calling the DescribeFileCaches operation, which returns a list of caches in your account. If you pass the cache ID for a deleted cache, the DescribeFileCaches operation returns a FileCacheNotFound error.  The data in a deleted cache is also deleted and can't be recovered by any means.
    @Sendable
    @inlinable
    public func deleteFileCache(_ input: DeleteFileCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFileCacheResponse {
        try await self.client.execute(
            operation: "DeleteFileCache", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon File Cache resource. After deletion, the cache no longer exists, and its data is gone. The DeleteFileCache operation returns while the cache has the DELETING status. You can check the cache deletion status by calling the DescribeFileCaches operation, which returns a list of caches in your account. If you pass the cache ID for a deleted cache, the DescribeFileCaches operation returns a FileCacheNotFound error.  The data in a deleted cache is also deleted and can't be recovered by any means.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - fileCacheId: The ID of the cache that's being deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFileCache(
        clientRequestToken: String? = DeleteFileCacheRequest.idempotencyToken(),
        fileCacheId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFileCacheResponse {
        let input = DeleteFileCacheRequest(
            clientRequestToken: clientRequestToken, 
            fileCacheId: fileCacheId
        )
        return try await self.deleteFileCache(input, logger: logger)
    }

    /// Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted. To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a FileSystemId value to the DeleteFileSystem operation. Before deleting an Amazon FSx for OpenZFS file system, make sure that there aren't  any Amazon S3 access points attached to any volume. For more information on how to list S3  access points that are attached to volumes, see  Listing S3 access point attachments.  For more information on how to delete S3 access points, see  Deleting an S3 access point attachment. By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted. To delete an Amazon FSx for Lustre file system, first  unmount it from every connected Amazon EC2 instance, then provide a FileSystemId value to the DeleteFileSystem operation. By default, Amazon FSx will not take a final backup when the DeleteFileSystem operation is invoked. On file systems not linked to an Amazon S3 bucket, set SkipFinalBackup to false to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the AgeOfOldestQueuedMessage metric to be zero (if using automatic export) or you can run an export data repository task. If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task. The DeleteFileSystem operation returns while the file system has the DELETING status. You can check the file system deletion status by calling the DescribeFileSystems operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the DescribeFileSystems operation returns a FileSystemNotFound error.  If a data repository task is in a PENDING or EXECUTING state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request).   The data in a deleted file system is also deleted and can't be recovered by any means.
    @Sendable
    @inlinable
    public func deleteFileSystem(_ input: DeleteFileSystemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFileSystemResponse {
        try await self.client.execute(
            operation: "DeleteFileSystem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted. To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a FileSystemId value to the DeleteFileSystem operation. Before deleting an Amazon FSx for OpenZFS file system, make sure that there aren't  any Amazon S3 access points attached to any volume. For more information on how to list S3  access points that are attached to volumes, see  Listing S3 access point attachments.  For more information on how to delete S3 access points, see  Deleting an S3 access point attachment. By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted. To delete an Amazon FSx for Lustre file system, first  unmount it from every connected Amazon EC2 instance, then provide a FileSystemId value to the DeleteFileSystem operation. By default, Amazon FSx will not take a final backup when the DeleteFileSystem operation is invoked. On file systems not linked to an Amazon S3 bucket, set SkipFinalBackup to false to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the AgeOfOldestQueuedMessage metric to be zero (if using automatic export) or you can run an export data repository task. If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task. The DeleteFileSystem operation returns while the file system has the DELETING status. You can check the file system deletion status by calling the DescribeFileSystems operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the DescribeFileSystems operation returns a FileSystemNotFound error.  If a data repository task is in a PENDING or EXECUTING state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request).   The data in a deleted file system is also deleted and can't be recovered by any means.
    ///
    /// Parameters:
    ///   - clientRequestToken: A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent deletion. This token is automatically filled on your behalf when using the Command Line Interface (CLI) or an Amazon Web Services SDK.
    ///   - fileSystemId: The ID of the file system that you want to delete.
    ///   - lustreConfiguration: 
    ///   - openZFSConfiguration: The configuration object for the OpenZFS file system used in the DeleteFileSystem operation.
    ///   - windowsConfiguration: 
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFileSystem(
        clientRequestToken: String? = DeleteFileSystemRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        lustreConfiguration: DeleteFileSystemLustreConfiguration? = nil,
        openZFSConfiguration: DeleteFileSystemOpenZFSConfiguration? = nil,
        windowsConfiguration: DeleteFileSystemWindowsConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFileSystemResponse {
        let input = DeleteFileSystemRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            lustreConfiguration: lustreConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            windowsConfiguration: windowsConfiguration
        )
        return try await self.deleteFileSystem(input, logger: logger)
    }

    /// Deletes an Amazon FSx for OpenZFS snapshot. After deletion, the snapshot no longer exists, and its data is gone. Deleting a snapshot doesn't affect snapshots stored in a file system backup.  The DeleteSnapshot operation returns instantly. The snapshot appears with the lifecycle status of DELETING until the deletion is complete.
    @Sendable
    @inlinable
    public func deleteSnapshot(_ input: DeleteSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSnapshotResponse {
        try await self.client.execute(
            operation: "DeleteSnapshot", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon FSx for OpenZFS snapshot. After deletion, the snapshot no longer exists, and its data is gone. Deleting a snapshot doesn't affect snapshots stored in a file system backup.  The DeleteSnapshot operation returns instantly. The snapshot appears with the lifecycle status of DELETING until the deletion is complete.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - snapshotId: The ID of the snapshot that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSnapshot(
        clientRequestToken: String? = DeleteSnapshotRequest.idempotencyToken(),
        snapshotId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSnapshotResponse {
        let input = DeleteSnapshotRequest(
            clientRequestToken: clientRequestToken, 
            snapshotId: snapshotId
        )
        return try await self.deleteSnapshot(input, logger: logger)
    }

    /// Deletes an existing Amazon FSx for ONTAP storage virtual machine (SVM). Prior  to deleting an SVM, you must delete all non-root volumes in the SVM, otherwise the operation will fail.
    @Sendable
    @inlinable
    public func deleteStorageVirtualMachine(_ input: DeleteStorageVirtualMachineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteStorageVirtualMachineResponse {
        try await self.client.execute(
            operation: "DeleteStorageVirtualMachine", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing Amazon FSx for ONTAP storage virtual machine (SVM). Prior  to deleting an SVM, you must delete all non-root volumes in the SVM, otherwise the operation will fail.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - storageVirtualMachineId: The ID of the SVM that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteStorageVirtualMachine(
        clientRequestToken: String? = DeleteStorageVirtualMachineRequest.idempotencyToken(),
        storageVirtualMachineId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteStorageVirtualMachineResponse {
        let input = DeleteStorageVirtualMachineRequest(
            clientRequestToken: clientRequestToken, 
            storageVirtualMachineId: storageVirtualMachineId
        )
        return try await self.deleteStorageVirtualMachine(input, logger: logger)
    }

    /// Deletes an Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volume.
    @Sendable
    @inlinable
    public func deleteVolume(_ input: DeleteVolumeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteVolumeResponse {
        try await self.client.execute(
            operation: "DeleteVolume", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volume.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - ontapConfiguration: For Amazon FSx for ONTAP volumes, specify whether to take a final backup of the volume and apply tags to the backup. To apply tags to the backup, you must have the fsx:TagResource permission.
    ///   - openZFSConfiguration: For Amazon FSx for OpenZFS volumes, specify whether to delete all child volumes and snapshots.
    ///   - volumeId: The ID of the volume that you are deleting.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteVolume(
        clientRequestToken: String? = DeleteVolumeRequest.idempotencyToken(),
        ontapConfiguration: DeleteVolumeOntapConfiguration? = nil,
        openZFSConfiguration: DeleteVolumeOpenZFSConfiguration? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteVolumeResponse {
        let input = DeleteVolumeRequest(
            clientRequestToken: clientRequestToken, 
            ontapConfiguration: ontapConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            volumeId: volumeId
        )
        return try await self.deleteVolume(input, logger: logger)
    }

    /// Returns the description of a specific Amazon FSx backup, if a BackupIds value is provided for that backup. Otherwise, it returns all backups owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all backups, you can optionally specify the MaxResults parameter to limit the number of backups in a response. If more backups remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of the NextToken value from the last response. This operation is used in an iterative process to retrieve a list of your backups. DescribeBackups is called first without a NextToken value. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken value. When using this operation, keep the following in mind:   The operation might return fewer than the MaxResults value of backup descriptions while still including a NextToken value.   The order of the backups returned in the response of one DescribeBackups call and the order of the backups returned across the responses of a multi-call iteration is unspecified.
    @Sendable
    @inlinable
    public func describeBackups(_ input: DescribeBackupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBackupsResponse {
        try await self.client.execute(
            operation: "DescribeBackups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of a specific Amazon FSx backup, if a BackupIds value is provided for that backup. Otherwise, it returns all backups owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all backups, you can optionally specify the MaxResults parameter to limit the number of backups in a response. If more backups remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of the NextToken value from the last response. This operation is used in an iterative process to retrieve a list of your backups. DescribeBackups is called first without a NextToken value. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken value. When using this operation, keep the following in mind:   The operation might return fewer than the MaxResults value of backup descriptions while still including a NextToken value.   The order of the backups returned in the response of one DescribeBackups call and the order of the backups returned across the responses of a multi-call iteration is unspecified.
    ///
    /// Parameters:
    ///   - backupIds: The IDs of the backups that you want to retrieve. This parameter value overrides any filters. If any IDs aren't found, a BackupNotFound error occurs.
    ///   - filters: The filters structure. The supported names are file-system-id, backup-type, file-system-type, and volume-id.
    ///   - maxResults: Maximum number of backups to return in the response. This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - nextToken: An opaque pagination token returned from a previous DescribeBackups operation. If a token is present, the operation continues the list from where the returning call left off.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBackups(
        backupIds: [String]? = nil,
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBackupsResponse {
        let input = DescribeBackupsRequest(
            backupIds: backupIds, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeBackups(input, logger: logger)
    }

    /// Returns the description of specific Amazon FSx for Lustre or Amazon File Cache data repository associations, if one or more AssociationIds values are provided in the request, or if filters are used in the request. Data repository associations are supported on Amazon File Cache resources and all FSx for Lustre 2.12 and 2,15 file systems, excluding scratch_1 deployment type. You can use filters to narrow the response to include just data repository associations for specific file systems (use the file-system-id filter with the ID of the file system) or caches (use the file-cache-id filter with the ID of the cache), or data repository associations for a specific repository type (use the data-repository-type filter with a value of S3 or NFS). If you don't use filters, the response returns all data repository associations owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all data repository associations, you can paginate the response by using the optional MaxResults parameter to limit the number of data repository associations returned in a response. If more data repository associations remain, a NextToken value is returned in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.
    @Sendable
    @inlinable
    public func describeDataRepositoryAssociations(_ input: DescribeDataRepositoryAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDataRepositoryAssociationsResponse {
        try await self.client.execute(
            operation: "DescribeDataRepositoryAssociations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of specific Amazon FSx for Lustre or Amazon File Cache data repository associations, if one or more AssociationIds values are provided in the request, or if filters are used in the request. Data repository associations are supported on Amazon File Cache resources and all FSx for Lustre 2.12 and 2,15 file systems, excluding scratch_1 deployment type. You can use filters to narrow the response to include just data repository associations for specific file systems (use the file-system-id filter with the ID of the file system) or caches (use the file-cache-id filter with the ID of the cache), or data repository associations for a specific repository type (use the data-repository-type filter with a value of S3 or NFS). If you don't use filters, the response returns all data repository associations owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all data repository associations, you can paginate the response by using the optional MaxResults parameter to limit the number of data repository associations returned in a response. If more data repository associations remain, a NextToken value is returned in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.
    ///
    /// Parameters:
    ///   - associationIds: IDs of the data repository associations whose descriptions you want to retrieve (String).
    ///   - filters: 
    ///   - maxResults: The maximum number of resources to return in the response. This value must be an integer greater than zero.
    ///   - nextToken: 
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataRepositoryAssociations(
        associationIds: [String]? = nil,
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDataRepositoryAssociationsResponse {
        let input = DescribeDataRepositoryAssociationsRequest(
            associationIds: associationIds, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeDataRepositoryAssociations(input, logger: logger)
    }

    /// Returns the description of specific Amazon FSx for Lustre or Amazon File Cache data repository tasks, if one or more TaskIds values are provided in the request, or if filters are used in the request.  You can use filters to narrow the response to include just tasks for specific file systems or caches,  or tasks in a specific lifecycle state. Otherwise, it returns all data repository tasks owned  by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all tasks, you can paginate the response by using  the optional MaxResults parameter to limit the number of tasks returned in a response. If more tasks remain, a NextToken value is returned in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.
    @Sendable
    @inlinable
    public func describeDataRepositoryTasks(_ input: DescribeDataRepositoryTasksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDataRepositoryTasksResponse {
        try await self.client.execute(
            operation: "DescribeDataRepositoryTasks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of specific Amazon FSx for Lustre or Amazon File Cache data repository tasks, if one or more TaskIds values are provided in the request, or if filters are used in the request.  You can use filters to narrow the response to include just tasks for specific file systems or caches,  or tasks in a specific lifecycle state. Otherwise, it returns all data repository tasks owned  by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all tasks, you can paginate the response by using  the optional MaxResults parameter to limit the number of tasks returned in a response. If more tasks remain, a NextToken value is returned in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.
    ///
    /// Parameters:
    ///   - filters: (Optional) You can use filters to narrow the DescribeDataRepositoryTasks response to  include just tasks for specific file systems, or tasks in a specific lifecycle state.
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - taskIds: (Optional) IDs of the tasks whose descriptions you want to retrieve (String).
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataRepositoryTasks(
        filters: [DataRepositoryTaskFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        taskIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDataRepositoryTasksResponse {
        let input = DescribeDataRepositoryTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            taskIds: taskIds
        )
        return try await self.describeDataRepositoryTasks(input, logger: logger)
    }

    /// Returns the description of a specific Amazon File Cache resource, if a FileCacheIds value is provided for that cache. Otherwise, it returns descriptions of all caches owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all cache descriptions, you can optionally specify the MaxResults parameter to limit the number of descriptions in a response. If more cache descriptions remain, the operation returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This operation is used in an iterative process to retrieve a list of your cache descriptions. DescribeFileCaches is called first without a NextTokenvalue. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this operation, keep the following in mind:   The implementation might return fewer than MaxResults cache descriptions while still including a NextToken value.   The order of caches returned in the response of one DescribeFileCaches call and the order of caches returned across the responses of a multicall iteration is unspecified.
    @Sendable
    @inlinable
    public func describeFileCaches(_ input: DescribeFileCachesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFileCachesResponse {
        try await self.client.execute(
            operation: "DescribeFileCaches", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of a specific Amazon File Cache resource, if a FileCacheIds value is provided for that cache. Otherwise, it returns descriptions of all caches owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all cache descriptions, you can optionally specify the MaxResults parameter to limit the number of descriptions in a response. If more cache descriptions remain, the operation returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This operation is used in an iterative process to retrieve a list of your cache descriptions. DescribeFileCaches is called first without a NextTokenvalue. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this operation, keep the following in mind:   The implementation might return fewer than MaxResults cache descriptions while still including a NextToken value.   The order of caches returned in the response of one DescribeFileCaches call and the order of caches returned across the responses of a multicall iteration is unspecified.
    ///
    /// Parameters:
    ///   - fileCacheIds: IDs of the caches whose descriptions you want to retrieve (String).
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFileCaches(
        fileCacheIds: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFileCachesResponse {
        let input = DescribeFileCachesRequest(
            fileCacheIds: fileCacheIds, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeFileCaches(input, logger: logger)
    }

    /// Returns the DNS aliases that are associated with the specified Amazon FSx for Windows File Server file system. A history of  all DNS aliases that have been associated with and disassociated from the file system is available in the list of AdministrativeAction  provided in the DescribeFileSystems operation response.
    @Sendable
    @inlinable
    public func describeFileSystemAliases(_ input: DescribeFileSystemAliasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFileSystemAliasesResponse {
        try await self.client.execute(
            operation: "DescribeFileSystemAliases", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the DNS aliases that are associated with the specified Amazon FSx for Windows File Server file system. A history of  all DNS aliases that have been associated with and disassociated from the file system is available in the list of AdministrativeAction  provided in the DescribeFileSystems operation response.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - fileSystemId: The ID of the file system to return the associated DNS aliases for (String).
    ///   - maxResults: Maximum number of DNS aliases to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - nextToken: Opaque pagination token returned from a previous DescribeFileSystemAliases operation (String). If a token is included in the request, the action continues the list from where the previous returning call left off.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFileSystemAliases(
        clientRequestToken: String? = DescribeFileSystemAliasesRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFileSystemAliasesResponse {
        let input = DescribeFileSystemAliasesRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeFileSystemAliases(input, logger: logger)
    }

    /// Returns the description of specific Amazon FSx file systems, if a FileSystemIds value is provided for that file system. Otherwise, it returns descriptions of all file systems owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all file system descriptions, you can optionally specify the MaxResults parameter to limit the number of descriptions in a response. If more file system descriptions remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This operation is used in an iterative process to retrieve a list of your file system descriptions. DescribeFileSystems is called first without a NextTokenvalue. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this operation, keep the following in mind:   The implementation might return fewer than MaxResults file system descriptions while still including a NextToken value.   The order of file systems returned in the response of one DescribeFileSystems call and the order of file systems returned across the responses of a multicall iteration is unspecified.
    @Sendable
    @inlinable
    public func describeFileSystems(_ input: DescribeFileSystemsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFileSystemsResponse {
        try await self.client.execute(
            operation: "DescribeFileSystems", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of specific Amazon FSx file systems, if a FileSystemIds value is provided for that file system. Otherwise, it returns descriptions of all file systems owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all file system descriptions, you can optionally specify the MaxResults parameter to limit the number of descriptions in a response. If more file system descriptions remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This operation is used in an iterative process to retrieve a list of your file system descriptions. DescribeFileSystems is called first without a NextTokenvalue. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this operation, keep the following in mind:   The implementation might return fewer than MaxResults file system descriptions while still including a NextToken value.   The order of file systems returned in the response of one DescribeFileSystems call and the order of file systems returned across the responses of a multicall iteration is unspecified.
    ///
    /// Parameters:
    ///   - fileSystemIds: IDs of the file systems whose descriptions you want to retrieve (String).
    ///   - maxResults: Maximum number of file systems to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - nextToken: Opaque pagination token returned from a previous DescribeFileSystems operation (String). If a token present, the operation continues the list from where the returning call left off.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFileSystems(
        fileSystemIds: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFileSystemsResponse {
        let input = DescribeFileSystemsRequest(
            fileSystemIds: fileSystemIds, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeFileSystems(input, logger: logger)
    }

    /// Describes one or more S3 access points attached to Amazon FSx volumes. The requester requires the following permission to perform this action:    fsx:DescribeS3AccessPointAttachments
    @Sendable
    @inlinable
    public func describeS3AccessPointAttachments(_ input: DescribeS3AccessPointAttachmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeS3AccessPointAttachmentsResponse {
        try await self.client.execute(
            operation: "DescribeS3AccessPointAttachments", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes one or more S3 access points attached to Amazon FSx volumes. The requester requires the following permission to perform this action:    fsx:DescribeS3AccessPointAttachments
    ///
    /// Parameters:
    ///   - filters: Enter a filter Name and Values pair to view a select set of S3 access point attachments.
    ///   - maxResults: 
    ///   - names: The names of the S3 access point attachments whose descriptions you want to retrieve.
    ///   - nextToken: 
    ///   - logger: Logger use during operation
    @inlinable
    public func describeS3AccessPointAttachments(
        filters: [S3AccessPointAttachmentsFilter]? = nil,
        maxResults: Int? = nil,
        names: [String]? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeS3AccessPointAttachmentsResponse {
        let input = DescribeS3AccessPointAttachmentsRequest(
            filters: filters, 
            maxResults: maxResults, 
            names: names, 
            nextToken: nextToken
        )
        return try await self.describeS3AccessPointAttachments(input, logger: logger)
    }

    /// Indicates whether participant accounts in your organization can create Amazon FSx for NetApp ONTAP Multi-AZ file systems in subnets that are shared by a virtual private cloud (VPC) owner. For more information, see Creating FSx for ONTAP file systems in shared subnets.
    @Sendable
    @inlinable
    public func describeSharedVpcConfiguration(_ input: DescribeSharedVpcConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSharedVpcConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeSharedVpcConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Indicates whether participant accounts in your organization can create Amazon FSx for NetApp ONTAP Multi-AZ file systems in subnets that are shared by a virtual private cloud (VPC) owner. For more information, see Creating FSx for ONTAP file systems in shared subnets.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSharedVpcConfiguration(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSharedVpcConfigurationResponse {
        let input = DescribeSharedVpcConfigurationRequest(
        )
        return try await self.describeSharedVpcConfiguration(input, logger: logger)
    }

    /// Returns the description of specific Amazon FSx for OpenZFS snapshots, if a SnapshotIds value is provided. Otherwise, this operation returns all snapshots owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all snapshots, you can optionally specify the MaxResults parameter to limit the number of snapshots in a response. If more backups remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.  Use this operation in an iterative process to retrieve a list of your snapshots. DescribeSnapshots is called first without a NextToken value. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken value. When using this operation, keep the following in mind:   The operation might return fewer than the MaxResults value of snapshot descriptions while still including a NextToken value.   The order of snapshots returned in the response of one DescribeSnapshots call and the order of backups returned across the responses of a multi-call iteration is unspecified.
    @Sendable
    @inlinable
    public func describeSnapshots(_ input: DescribeSnapshotsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSnapshotsResponse {
        try await self.client.execute(
            operation: "DescribeSnapshots", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the description of specific Amazon FSx for OpenZFS snapshots, if a SnapshotIds value is provided. Otherwise, this operation returns all snapshots owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling. When retrieving all snapshots, you can optionally specify the MaxResults parameter to limit the number of snapshots in a response. If more backups remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response.  Use this operation in an iterative process to retrieve a list of your snapshots. DescribeSnapshots is called first without a NextToken value. Then the operation continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken value. When using this operation, keep the following in mind:   The operation might return fewer than the MaxResults value of snapshot descriptions while still including a NextToken value.   The order of snapshots returned in the response of one DescribeSnapshots call and the order of backups returned across the responses of a multi-call iteration is unspecified.
    ///
    /// Parameters:
    ///   - filters: The filters structure. The supported names are file-system-id or volume-id.
    ///   - includeShared: Set to false (default) if you want to only see the snapshots owned by your Amazon Web Services account. Set to true if you want to see the snapshots in your account and the ones shared with you from another account.
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - snapshotIds: The IDs of the snapshots that you want to retrieve. This parameter value overrides any filters. If any IDs aren't found, a SnapshotNotFound error occurs.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSnapshots(
        filters: [SnapshotFilter]? = nil,
        includeShared: Bool? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        snapshotIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSnapshotsResponse {
        let input = DescribeSnapshotsRequest(
            filters: filters, 
            includeShared: includeShared, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            snapshotIds: snapshotIds
        )
        return try await self.describeSnapshots(input, logger: logger)
    }

    /// Describes one or more Amazon FSx for NetApp ONTAP storage virtual machines (SVMs).
    @Sendable
    @inlinable
    public func describeStorageVirtualMachines(_ input: DescribeStorageVirtualMachinesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeStorageVirtualMachinesResponse {
        try await self.client.execute(
            operation: "DescribeStorageVirtualMachines", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes one or more Amazon FSx for NetApp ONTAP storage virtual machines (SVMs).
    ///
    /// Parameters:
    ///   - filters: Enter a filter name:value pair to view a select set of SVMs.
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - storageVirtualMachineIds: Enter the ID of one or more SVMs that you want to view.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeStorageVirtualMachines(
        filters: [StorageVirtualMachineFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        storageVirtualMachineIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeStorageVirtualMachinesResponse {
        let input = DescribeStorageVirtualMachinesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            storageVirtualMachineIds: storageVirtualMachineIds
        )
        return try await self.describeStorageVirtualMachines(input, logger: logger)
    }

    /// Describes one or more Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volumes.
    @Sendable
    @inlinable
    public func describeVolumes(_ input: DescribeVolumesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeVolumesResponse {
        try await self.client.execute(
            operation: "DescribeVolumes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes one or more Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volumes.
    ///
    /// Parameters:
    ///   - filters: Enter a filter Name and Values pair to view a select set of volumes.
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - volumeIds: The IDs of the volumes whose descriptions you want to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeVolumes(
        filters: [VolumeFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        volumeIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeVolumesResponse {
        let input = DescribeVolumesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            volumeIds: volumeIds
        )
        return try await self.describeVolumes(input, logger: logger)
    }

    /// Detaches an S3 access point from an Amazon FSx volume and deletes the S3 access point. The requester requires the following permission to perform this action:    fsx:DetachAndDeleteS3AccessPoint     s3:DeleteAccessPoint
    @Sendable
    @inlinable
    public func detachAndDeleteS3AccessPoint(_ input: DetachAndDeleteS3AccessPointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachAndDeleteS3AccessPointResponse {
        try await self.client.execute(
            operation: "DetachAndDeleteS3AccessPoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches an S3 access point from an Amazon FSx volume and deletes the S3 access point. The requester requires the following permission to perform this action:    fsx:DetachAndDeleteS3AccessPoint     s3:DeleteAccessPoint
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: The name of the S3 access point attachment that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachAndDeleteS3AccessPoint(
        clientRequestToken: String? = DetachAndDeleteS3AccessPointRequest.idempotencyToken(),
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachAndDeleteS3AccessPointResponse {
        let input = DetachAndDeleteS3AccessPointRequest(
            clientRequestToken: clientRequestToken, 
            name: name
        )
        return try await self.detachAndDeleteS3AccessPoint(input, logger: logger)
    }

    /// Use this action to disassociate, or remove, one or more Domain Name Service (DNS) aliases  from an Amazon FSx for Windows File Server file system. If you attempt to disassociate a DNS alias that is not  associated with the file system, Amazon FSx responds with an HTTP status code 400 (Bad Request). For more information, see  Working with DNS Aliases. The system generated response showing the DNS aliases that  Amazon FSx is attempting to disassociate from the file system.  Use the  API  operation to monitor the status of the aliases Amazon FSx is  disassociating with the file system.
    @Sendable
    @inlinable
    public func disassociateFileSystemAliases(_ input: DisassociateFileSystemAliasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateFileSystemAliasesResponse {
        try await self.client.execute(
            operation: "DisassociateFileSystemAliases", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Use this action to disassociate, or remove, one or more Domain Name Service (DNS) aliases  from an Amazon FSx for Windows File Server file system. If you attempt to disassociate a DNS alias that is not  associated with the file system, Amazon FSx responds with an HTTP status code 400 (Bad Request). For more information, see  Working with DNS Aliases. The system generated response showing the DNS aliases that  Amazon FSx is attempting to disassociate from the file system.  Use the  API  operation to monitor the status of the aliases Amazon FSx is  disassociating with the file system.
    ///
    /// Parameters:
    ///   - aliases: An array of one or more DNS alias names to disassociate, or remove, from the file system.
    ///   - clientRequestToken: 
    ///   - fileSystemId: Specifies the file system from which to disassociate the DNS aliases.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateFileSystemAliases(
        aliases: [String]? = nil,
        clientRequestToken: String? = DisassociateFileSystemAliasesRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateFileSystemAliasesResponse {
        let input = DisassociateFileSystemAliasesRequest(
            aliases: aliases, 
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId
        )
        return try await self.disassociateFileSystemAliases(input, logger: logger)
    }

    /// Lists tags for Amazon FSx resources. When retrieving all tags, you can optionally specify the MaxResults parameter to limit the number of tags in a response. If more tags remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This action is used in an iterative process to retrieve a list of your tags. ListTagsForResource is called first without a NextTokenvalue. Then the action continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this action, keep the following in mind:   The implementation might return fewer than MaxResults file system descriptions while still including a NextToken value.   The order of tags returned in the response of one ListTagsForResource call and the order of tags returned across the responses of a multi-call iteration is unspecified.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists tags for Amazon FSx resources. When retrieving all tags, you can optionally specify the MaxResults parameter to limit the number of tags in a response. If more tags remain, Amazon FSx returns a NextToken value in the response. In this case, send a later request with the NextToken request parameter set to the value of NextToken from the last response. This action is used in an iterative process to retrieve a list of your tags. ListTagsForResource is called first without a NextTokenvalue. Then the action continues to be called with the NextToken parameter set to the value of the last NextToken value until a response has no NextToken. When using this action, keep the following in mind:   The implementation might return fewer than MaxResults file system descriptions while still including a NextToken value.   The order of tags returned in the response of one ListTagsForResource call and the order of tags returned across the responses of a multi-call iteration is unspecified.
    ///
    /// Parameters:
    ///   - maxResults: Maximum number of tags to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - nextToken: Opaque pagination token returned from a previous ListTagsForResource operation (String). If a token present, the action continues the list from where the returning call left off.
    ///   - resourceARN: The ARN of the Amazon FSx resource that will have its tags listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceARN: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceARN: resourceARN
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Releases the file system lock from an Amazon FSx for OpenZFS file system.
    @Sendable
    @inlinable
    public func releaseFileSystemNfsV3Locks(_ input: ReleaseFileSystemNfsV3LocksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ReleaseFileSystemNfsV3LocksResponse {
        try await self.client.execute(
            operation: "ReleaseFileSystemNfsV3Locks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Releases the file system lock from an Amazon FSx for OpenZFS file system.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - fileSystemId: 
    ///   - logger: Logger use during operation
    @inlinable
    public func releaseFileSystemNfsV3Locks(
        clientRequestToken: String? = ReleaseFileSystemNfsV3LocksRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ReleaseFileSystemNfsV3LocksResponse {
        let input = ReleaseFileSystemNfsV3LocksRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId
        )
        return try await self.releaseFileSystemNfsV3Locks(input, logger: logger)
    }

    /// Returns an Amazon FSx for OpenZFS volume to the state saved by the specified snapshot.
    @Sendable
    @inlinable
    public func restoreVolumeFromSnapshot(_ input: RestoreVolumeFromSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestoreVolumeFromSnapshotResponse {
        try await self.client.execute(
            operation: "RestoreVolumeFromSnapshot", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an Amazon FSx for OpenZFS volume to the state saved by the specified snapshot.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - options: The settings used when restoring the specified volume from snapshot.    DELETE_INTERMEDIATE_SNAPSHOTS - Deletes snapshots between the current state and the specified snapshot. If there are intermediate snapshots and this option isn't used, RestoreVolumeFromSnapshot fails.    DELETE_CLONED_VOLUMES - Deletes any dependent clone volumes  created from intermediate snapshots. If there are any dependent clone volumes and this  option isn't used, RestoreVolumeFromSnapshot fails.
    ///   - snapshotId: The ID of the source snapshot. Specifies the snapshot that you are restoring from.
    ///   - volumeId: The ID of the volume that you are restoring.
    ///   - logger: Logger use during operation
    @inlinable
    public func restoreVolumeFromSnapshot(
        clientRequestToken: String? = RestoreVolumeFromSnapshotRequest.idempotencyToken(),
        options: [RestoreOpenZFSVolumeOption]? = nil,
        snapshotId: String? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestoreVolumeFromSnapshotResponse {
        let input = RestoreVolumeFromSnapshotRequest(
            clientRequestToken: clientRequestToken, 
            options: options, 
            snapshotId: snapshotId, 
            volumeId: volumeId
        )
        return try await self.restoreVolumeFromSnapshot(input, logger: logger)
    }

    /// After performing steps to repair the Active Directory configuration of an FSx for Windows File Server file system, use this action to  initiate the process of Amazon FSx attempting to reconnect to the file system.
    @Sendable
    @inlinable
    public func startMisconfiguredStateRecovery(_ input: StartMisconfiguredStateRecoveryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartMisconfiguredStateRecoveryResponse {
        try await self.client.execute(
            operation: "StartMisconfiguredStateRecovery", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// After performing steps to repair the Active Directory configuration of an FSx for Windows File Server file system, use this action to  initiate the process of Amazon FSx attempting to reconnect to the file system.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - fileSystemId: 
    ///   - logger: Logger use during operation
    @inlinable
    public func startMisconfiguredStateRecovery(
        clientRequestToken: String? = StartMisconfiguredStateRecoveryRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartMisconfiguredStateRecoveryResponse {
        let input = StartMisconfiguredStateRecoveryRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId
        )
        return try await self.startMisconfiguredStateRecovery(input, logger: logger)
    }

    /// Tags an Amazon FSx resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Tags an Amazon FSx resource.
    ///
    /// Parameters:
    ///   - resourceARN: The Amazon Resource Name (ARN) of the Amazon FSx resource that you want to tag.
    ///   - tags: A list of tags for the resource. If a tag with a given key already exists, the value is replaced by the one specified in this parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceARN: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceARN: resourceARN, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// This action removes a tag from an Amazon FSx resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This action removes a tag from an Amazon FSx resource.
    ///
    /// Parameters:
    ///   - resourceARN: The ARN of the Amazon FSx resource to untag.
    ///   - tagKeys: A list of keys of tags on the resource to untag. In case the tag key doesn't exist, the call will still succeed to be idempotent.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceARN: String? = nil,
        tagKeys: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceARN: resourceARN, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the configuration of an existing data repository association on an Amazon FSx for Lustre file system. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type.
    @Sendable
    @inlinable
    public func updateDataRepositoryAssociation(_ input: UpdateDataRepositoryAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDataRepositoryAssociationResponse {
        try await self.client.execute(
            operation: "UpdateDataRepositoryAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration of an existing data repository association on an Amazon FSx for Lustre file system. Data repository associations are supported on all FSx for Lustre 2.12 and 2.15 file systems, excluding scratch_1 deployment type.
    ///
    /// Parameters:
    ///   - associationId: The ID of the data repository association that you are updating.
    ///   - clientRequestToken: 
    ///   - importedFileChunkSize: For files imported from a data repository, this value determines the stripe count and maximum amount of data per file (in MiB) stored on a single physical disk. The maximum number of disks that a single file can be striped across is limited by the total number of disks that make up the file system. The default chunk size is 1,024 MiB (1 GiB) and can go as high as 512,000 MiB (500 GiB). Amazon S3 objects have a maximum size of 5 TB.
    ///   - s3: The configuration for an Amazon S3 data repository linked to an Amazon FSx Lustre file system with a data repository association. The configuration defines which file events (new, changed, or deleted files or directories) are automatically imported from the linked data repository to the file system or automatically exported from the file system to the data repository.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDataRepositoryAssociation(
        associationId: String? = nil,
        clientRequestToken: String? = UpdateDataRepositoryAssociationRequest.idempotencyToken(),
        importedFileChunkSize: Int? = nil,
        s3: S3DataRepositoryConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDataRepositoryAssociationResponse {
        let input = UpdateDataRepositoryAssociationRequest(
            associationId: associationId, 
            clientRequestToken: clientRequestToken, 
            importedFileChunkSize: importedFileChunkSize, 
            s3: s3
        )
        return try await self.updateDataRepositoryAssociation(input, logger: logger)
    }

    /// Updates the configuration of an existing Amazon File Cache resource. You can update multiple properties in a single request.
    @Sendable
    @inlinable
    public func updateFileCache(_ input: UpdateFileCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFileCacheResponse {
        try await self.client.execute(
            operation: "UpdateFileCache", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration of an existing Amazon File Cache resource. You can update multiple properties in a single request.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - fileCacheId: The ID of the cache that you are updating.
    ///   - lustreConfiguration: The configuration updates for an Amazon File Cache resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFileCache(
        clientRequestToken: String? = UpdateFileCacheRequest.idempotencyToken(),
        fileCacheId: String? = nil,
        lustreConfiguration: UpdateFileCacheLustreConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFileCacheResponse {
        let input = UpdateFileCacheRequest(
            clientRequestToken: clientRequestToken, 
            fileCacheId: fileCacheId, 
            lustreConfiguration: lustreConfiguration
        )
        return try await self.updateFileCache(input, logger: logger)
    }

    /// Use this operation to update the configuration of an existing Amazon FSx file system. You can update multiple properties in a single request. For FSx for Windows File Server file systems, you can update the following properties:    AuditLogConfiguration     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DiskIopsConfiguration     SelfManagedActiveDirectoryConfiguration     StorageCapacity     StorageType     ThroughputCapacity     WeeklyMaintenanceStartTime    For FSx for Lustre file systems, you can update the following properties:    AutoImportPolicy     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DataCompressionType     FileSystemTypeVersion     LogConfiguration     LustreReadCacheConfiguration     LustreRootSquashConfiguration     MetadataConfiguration     PerUnitStorageThroughput     StorageCapacity     ThroughputCapacity     WeeklyMaintenanceStartTime    For FSx for ONTAP file systems, you can update the following properties:    AddRouteTableIds     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DiskIopsConfiguration     EndpointIpv6AddressRange     FsxAdminPassword     HAPairs     RemoveRouteTableIds     StorageCapacity     ThroughputCapacity     ThroughputCapacityPerHAPair     WeeklyMaintenanceStartTime    For FSx for OpenZFS file systems, you can update the following properties:    AddRouteTableIds     AutomaticBackupRetentionDays     CopyTagsToBackups     CopyTagsToVolumes     DailyAutomaticBackupStartTime     DiskIopsConfiguration     EndpointIpv6AddressRange     ReadCacheConfiguration     RemoveRouteTableIds     StorageCapacity     ThroughputCapacity     WeeklyMaintenanceStartTime
    @Sendable
    @inlinable
    public func updateFileSystem(_ input: UpdateFileSystemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFileSystemResponse {
        try await self.client.execute(
            operation: "UpdateFileSystem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Use this operation to update the configuration of an existing Amazon FSx file system. You can update multiple properties in a single request. For FSx for Windows File Server file systems, you can update the following properties:    AuditLogConfiguration     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DiskIopsConfiguration     SelfManagedActiveDirectoryConfiguration     StorageCapacity     StorageType     ThroughputCapacity     WeeklyMaintenanceStartTime    For FSx for Lustre file systems, you can update the following properties:    AutoImportPolicy     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DataCompressionType     FileSystemTypeVersion     LogConfiguration     LustreReadCacheConfiguration     LustreRootSquashConfiguration     MetadataConfiguration     PerUnitStorageThroughput     StorageCapacity     ThroughputCapacity     WeeklyMaintenanceStartTime    For FSx for ONTAP file systems, you can update the following properties:    AddRouteTableIds     AutomaticBackupRetentionDays     DailyAutomaticBackupStartTime     DiskIopsConfiguration     EndpointIpv6AddressRange     FsxAdminPassword     HAPairs     RemoveRouteTableIds     StorageCapacity     ThroughputCapacity     ThroughputCapacityPerHAPair     WeeklyMaintenanceStartTime    For FSx for OpenZFS file systems, you can update the following properties:    AddRouteTableIds     AutomaticBackupRetentionDays     CopyTagsToBackups     CopyTagsToVolumes     DailyAutomaticBackupStartTime     DiskIopsConfiguration     EndpointIpv6AddressRange     ReadCacheConfiguration     RemoveRouteTableIds     StorageCapacity     ThroughputCapacity     WeeklyMaintenanceStartTime
    ///
    /// Parameters:
    ///   - clientRequestToken: A string of up to 63 ASCII characters that Amazon FSx uses to ensure idempotent updates. This string is automatically filled on your behalf when you use the Command Line Interface (CLI) or an Amazon Web Services SDK.
    ///   - fileSystemId: The ID of the file system that you are updating.
    ///   - fileSystemTypeVersion: The Lustre version you are updating an FSx for Lustre file system to. Valid values are 2.12 and 2.15. The value you choose must be newer than the file system's current Lustre version.
    ///   - lustreConfiguration: 
    ///   - networkType: Changes the network type of an FSx for OpenZFS file system.
    ///   - ontapConfiguration: 
    ///   - openZFSConfiguration: The configuration updates for an FSx for OpenZFS file system.
    ///   - storageCapacity: Use this parameter to increase the storage capacity of an FSx for Windows File Server, FSx for Lustre, FSx for OpenZFS, or FSx for ONTAP file system. For second-generation FSx for ONTAP file systems, you can also decrease the storage capacity. Specifies the storage capacity target value, in GiB, for the file system that you're updating.   You can't make a storage capacity increase request if there is an existing storage capacity increase request in progress.  For Lustre file systems, the storage capacity target value can be the following:   For SCRATCH_2, PERSISTENT_1, and PERSISTENT_2 SSD deployment types, valid values are in multiples of 2400 GiB. The value must be greater than the current storage capacity.   For PERSISTENT HDD file systems, valid values are multiples of 6000 GiB for 12-MBps throughput per TiB file systems and multiples of 1800 GiB for 40-MBps throughput per TiB file systems. The values must be greater than the current storage capacity.   For SCRATCH_1 file systems, you can't increase the storage capacity.   For more information, see Managing storage and throughput capacity in the FSx for Lustre User Guide. For FSx for OpenZFS file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. For more information, see Managing storage capacity in the FSx for OpenZFS User Guide. For Windows file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. To increase storage capacity, the file system must have at least 16 MBps of throughput capacity. For more information, see Managing storage capacity in the Amazon FSxfor Windows File Server User Guide. For ONTAP file systems, when increasing storage capacity, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. When decreasing storage capacity on second-generation file systems, the target value must be at least 9 percent smaller than the current SSD storage capacity. For more information, see File system storage capacity and IOPS in the Amazon FSx for NetApp ONTAP User Guide.
    ///   - storageType: 
    ///   - windowsConfiguration: The configuration updates for an Amazon FSx for Windows File Server file system.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFileSystem(
        clientRequestToken: String? = UpdateFileSystemRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        fileSystemTypeVersion: String? = nil,
        lustreConfiguration: UpdateFileSystemLustreConfiguration? = nil,
        networkType: NetworkType? = nil,
        ontapConfiguration: UpdateFileSystemOntapConfiguration? = nil,
        openZFSConfiguration: UpdateFileSystemOpenZFSConfiguration? = nil,
        storageCapacity: Int? = nil,
        storageType: StorageType? = nil,
        windowsConfiguration: UpdateFileSystemWindowsConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFileSystemResponse {
        let input = UpdateFileSystemRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            fileSystemTypeVersion: fileSystemTypeVersion, 
            lustreConfiguration: lustreConfiguration, 
            networkType: networkType, 
            ontapConfiguration: ontapConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            storageCapacity: storageCapacity, 
            storageType: storageType, 
            windowsConfiguration: windowsConfiguration
        )
        return try await self.updateFileSystem(input, logger: logger)
    }

    /// Configures whether participant accounts in your organization can create Amazon FSx for NetApp ONTAP Multi-AZ file systems in subnets that are shared by a virtual private cloud (VPC) owner. For more information, see the Amazon FSx for NetApp ONTAP User Guide.  We strongly recommend that participant-created Multi-AZ file systems in the shared VPC are deleted before you disable this feature. Once the feature is disabled, these file systems will enter a MISCONFIGURED state and behave like Single-AZ file systems. For more information, see Important considerations before disabling shared VPC support for Multi-AZ file systems.
    @Sendable
    @inlinable
    public func updateSharedVpcConfiguration(_ input: UpdateSharedVpcConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSharedVpcConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateSharedVpcConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Configures whether participant accounts in your organization can create Amazon FSx for NetApp ONTAP Multi-AZ file systems in subnets that are shared by a virtual private cloud (VPC) owner. For more information, see the Amazon FSx for NetApp ONTAP User Guide.  We strongly recommend that participant-created Multi-AZ file systems in the shared VPC are deleted before you disable this feature. Once the feature is disabled, these file systems will enter a MISCONFIGURED state and behave like Single-AZ file systems. For more information, see Important considerations before disabling shared VPC support for Multi-AZ file systems.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - enableFsxRouteTableUpdatesFromParticipantAccounts: Specifies whether participant accounts can create FSx for ONTAP Multi-AZ file systems in shared subnets. Set to true to enable or false to disable.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSharedVpcConfiguration(
        clientRequestToken: String? = UpdateSharedVpcConfigurationRequest.idempotencyToken(),
        enableFsxRouteTableUpdatesFromParticipantAccounts: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSharedVpcConfigurationResponse {
        let input = UpdateSharedVpcConfigurationRequest(
            clientRequestToken: clientRequestToken, 
            enableFsxRouteTableUpdatesFromParticipantAccounts: enableFsxRouteTableUpdatesFromParticipantAccounts
        )
        return try await self.updateSharedVpcConfiguration(input, logger: logger)
    }

    /// Updates the name of an Amazon FSx for OpenZFS snapshot.
    @Sendable
    @inlinable
    public func updateSnapshot(_ input: UpdateSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSnapshotResponse {
        try await self.client.execute(
            operation: "UpdateSnapshot", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the name of an Amazon FSx for OpenZFS snapshot.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: The name of the snapshot to update.
    ///   - snapshotId: The ID of the snapshot that you want to update, in the format fsvolsnap-0123456789abcdef0.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSnapshot(
        clientRequestToken: String? = UpdateSnapshotRequest.idempotencyToken(),
        name: String? = nil,
        snapshotId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSnapshotResponse {
        let input = UpdateSnapshotRequest(
            clientRequestToken: clientRequestToken, 
            name: name, 
            snapshotId: snapshotId
        )
        return try await self.updateSnapshot(input, logger: logger)
    }

    /// Updates an FSx for ONTAP storage virtual machine (SVM).
    @Sendable
    @inlinable
    public func updateStorageVirtualMachine(_ input: UpdateStorageVirtualMachineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateStorageVirtualMachineResponse {
        try await self.client.execute(
            operation: "UpdateStorageVirtualMachine", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an FSx for ONTAP storage virtual machine (SVM).
    ///
    /// Parameters:
    ///   - activeDirectoryConfiguration: Specifies updates to an SVM's Microsoft Active Directory (AD) configuration.
    ///   - clientRequestToken: 
    ///   - storageVirtualMachineId: The ID of the SVM that you want to update, in the format svm-0123456789abcdef0.
    ///   - svmAdminPassword: Specifies a new SvmAdminPassword.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateStorageVirtualMachine(
        activeDirectoryConfiguration: UpdateSvmActiveDirectoryConfiguration? = nil,
        clientRequestToken: String? = UpdateStorageVirtualMachineRequest.idempotencyToken(),
        storageVirtualMachineId: String? = nil,
        svmAdminPassword: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateStorageVirtualMachineResponse {
        let input = UpdateStorageVirtualMachineRequest(
            activeDirectoryConfiguration: activeDirectoryConfiguration, 
            clientRequestToken: clientRequestToken, 
            storageVirtualMachineId: storageVirtualMachineId, 
            svmAdminPassword: svmAdminPassword
        )
        return try await self.updateStorageVirtualMachine(input, logger: logger)
    }

    /// Updates the configuration of an Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volume.
    @Sendable
    @inlinable
    public func updateVolume(_ input: UpdateVolumeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateVolumeResponse {
        try await self.client.execute(
            operation: "UpdateVolume", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration of an Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volume.
    ///
    /// Parameters:
    ///   - clientRequestToken: 
    ///   - name: The name of the OpenZFS volume. OpenZFS root volumes are automatically named FSX. Child volume names must be unique among their parent volume's children. The name of the volume is part of the mount string for the OpenZFS volume.
    ///   - ontapConfiguration: The configuration of the ONTAP volume that you are updating.
    ///   - openZFSConfiguration: The configuration of the OpenZFS volume that you are updating.
    ///   - volumeId: The ID of the volume that you want to update, in the format fsvol-0123456789abcdef0.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateVolume(
        clientRequestToken: String? = UpdateVolumeRequest.idempotencyToken(),
        name: String? = nil,
        ontapConfiguration: UpdateOntapVolumeConfiguration? = nil,
        openZFSConfiguration: UpdateOpenZFSVolumeConfiguration? = nil,
        volumeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateVolumeResponse {
        let input = UpdateVolumeRequest(
            clientRequestToken: clientRequestToken, 
            name: name, 
            ontapConfiguration: ontapConfiguration, 
            openZFSConfiguration: openZFSConfiguration, 
            volumeId: volumeId
        )
        return try await self.updateVolume(input, logger: logger)
    }
}

extension FSx {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: FSx, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension FSx {
    /// Return PaginatorSequence for operation ``describeBackups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeBackupsPaginator(
        _ input: DescribeBackupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeBackupsRequest, DescribeBackupsResponse> {
        return .init(
            input: input,
            command: self.describeBackups,
            inputKey: \DescribeBackupsRequest.nextToken,
            outputKey: \DescribeBackupsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeBackups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupIds: The IDs of the backups that you want to retrieve. This parameter value overrides any filters. If any IDs aren't found, a BackupNotFound error occurs.
    ///   - filters: The filters structure. The supported names are file-system-id, backup-type, file-system-type, and volume-id.
    ///   - maxResults: Maximum number of backups to return in the response. This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeBackupsPaginator(
        backupIds: [String]? = nil,
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeBackupsRequest, DescribeBackupsResponse> {
        let input = DescribeBackupsRequest(
            backupIds: backupIds, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeBackupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeDataRepositoryAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDataRepositoryAssociationsPaginator(
        _ input: DescribeDataRepositoryAssociationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeDataRepositoryAssociationsRequest, DescribeDataRepositoryAssociationsResponse> {
        return .init(
            input: input,
            command: self.describeDataRepositoryAssociations,
            inputKey: \DescribeDataRepositoryAssociationsRequest.nextToken,
            outputKey: \DescribeDataRepositoryAssociationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeDataRepositoryAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - associationIds: IDs of the data repository associations whose descriptions you want to retrieve (String).
    ///   - filters: 
    ///   - maxResults: The maximum number of resources to return in the response. This value must be an integer greater than zero.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDataRepositoryAssociationsPaginator(
        associationIds: [String]? = nil,
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeDataRepositoryAssociationsRequest, DescribeDataRepositoryAssociationsResponse> {
        let input = DescribeDataRepositoryAssociationsRequest(
            associationIds: associationIds, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeDataRepositoryAssociationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeDataRepositoryTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDataRepositoryTasksPaginator(
        _ input: DescribeDataRepositoryTasksRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeDataRepositoryTasksRequest, DescribeDataRepositoryTasksResponse> {
        return .init(
            input: input,
            command: self.describeDataRepositoryTasks,
            inputKey: \DescribeDataRepositoryTasksRequest.nextToken,
            outputKey: \DescribeDataRepositoryTasksResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeDataRepositoryTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: (Optional) You can use filters to narrow the DescribeDataRepositoryTasks response to  include just tasks for specific file systems, or tasks in a specific lifecycle state.
    ///   - maxResults: 
    ///   - taskIds: (Optional) IDs of the tasks whose descriptions you want to retrieve (String).
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDataRepositoryTasksPaginator(
        filters: [DataRepositoryTaskFilter]? = nil,
        maxResults: Int? = nil,
        taskIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeDataRepositoryTasksRequest, DescribeDataRepositoryTasksResponse> {
        let input = DescribeDataRepositoryTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            taskIds: taskIds
        )
        return self.describeDataRepositoryTasksPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeFileCaches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileCachesPaginator(
        _ input: DescribeFileCachesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeFileCachesRequest, DescribeFileCachesResponse> {
        return .init(
            input: input,
            command: self.describeFileCaches,
            inputKey: \DescribeFileCachesRequest.nextToken,
            outputKey: \DescribeFileCachesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeFileCaches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - fileCacheIds: IDs of the caches whose descriptions you want to retrieve (String).
    ///   - maxResults: 
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileCachesPaginator(
        fileCacheIds: [String]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeFileCachesRequest, DescribeFileCachesResponse> {
        let input = DescribeFileCachesRequest(
            fileCacheIds: fileCacheIds, 
            maxResults: maxResults
        )
        return self.describeFileCachesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeFileSystemAliases(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileSystemAliasesPaginator(
        _ input: DescribeFileSystemAliasesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeFileSystemAliasesRequest, DescribeFileSystemAliasesResponse> {
        return .init(
            input: input,
            command: self.describeFileSystemAliases,
            inputKey: \DescribeFileSystemAliasesRequest.nextToken,
            outputKey: \DescribeFileSystemAliasesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeFileSystemAliases(_:logger:)``.
    ///
    /// - Parameters:
    ///   - clientRequestToken: 
    ///   - fileSystemId: The ID of the file system to return the associated DNS aliases for (String).
    ///   - maxResults: Maximum number of DNS aliases to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileSystemAliasesPaginator(
        clientRequestToken: String? = DescribeFileSystemAliasesRequest.idempotencyToken(),
        fileSystemId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeFileSystemAliasesRequest, DescribeFileSystemAliasesResponse> {
        let input = DescribeFileSystemAliasesRequest(
            clientRequestToken: clientRequestToken, 
            fileSystemId: fileSystemId, 
            maxResults: maxResults
        )
        return self.describeFileSystemAliasesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeFileSystems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileSystemsPaginator(
        _ input: DescribeFileSystemsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeFileSystemsRequest, DescribeFileSystemsResponse> {
        return .init(
            input: input,
            command: self.describeFileSystems,
            inputKey: \DescribeFileSystemsRequest.nextToken,
            outputKey: \DescribeFileSystemsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeFileSystems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - fileSystemIds: IDs of the file systems whose descriptions you want to retrieve (String).
    ///   - maxResults: Maximum number of file systems to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFileSystemsPaginator(
        fileSystemIds: [String]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeFileSystemsRequest, DescribeFileSystemsResponse> {
        let input = DescribeFileSystemsRequest(
            fileSystemIds: fileSystemIds, 
            maxResults: maxResults
        )
        return self.describeFileSystemsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeS3AccessPointAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeS3AccessPointAttachmentsPaginator(
        _ input: DescribeS3AccessPointAttachmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeS3AccessPointAttachmentsRequest, DescribeS3AccessPointAttachmentsResponse> {
        return .init(
            input: input,
            command: self.describeS3AccessPointAttachments,
            inputKey: \DescribeS3AccessPointAttachmentsRequest.nextToken,
            outputKey: \DescribeS3AccessPointAttachmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeS3AccessPointAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Enter a filter Name and Values pair to view a select set of S3 access point attachments.
    ///   - maxResults: 
    ///   - names: The names of the S3 access point attachments whose descriptions you want to retrieve.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeS3AccessPointAttachmentsPaginator(
        filters: [S3AccessPointAttachmentsFilter]? = nil,
        maxResults: Int? = nil,
        names: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeS3AccessPointAttachmentsRequest, DescribeS3AccessPointAttachmentsResponse> {
        let input = DescribeS3AccessPointAttachmentsRequest(
            filters: filters, 
            maxResults: maxResults, 
            names: names
        )
        return self.describeS3AccessPointAttachmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeSnapshots(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeSnapshotsPaginator(
        _ input: DescribeSnapshotsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeSnapshotsRequest, DescribeSnapshotsResponse> {
        return .init(
            input: input,
            command: self.describeSnapshots,
            inputKey: \DescribeSnapshotsRequest.nextToken,
            outputKey: \DescribeSnapshotsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeSnapshots(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: The filters structure. The supported names are file-system-id or volume-id.
    ///   - includeShared: Set to false (default) if you want to only see the snapshots owned by your Amazon Web Services account. Set to true if you want to see the snapshots in your account and the ones shared with you from another account.
    ///   - maxResults: 
    ///   - snapshotIds: The IDs of the snapshots that you want to retrieve. This parameter value overrides any filters. If any IDs aren't found, a SnapshotNotFound error occurs.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeSnapshotsPaginator(
        filters: [SnapshotFilter]? = nil,
        includeShared: Bool? = nil,
        maxResults: Int? = nil,
        snapshotIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeSnapshotsRequest, DescribeSnapshotsResponse> {
        let input = DescribeSnapshotsRequest(
            filters: filters, 
            includeShared: includeShared, 
            maxResults: maxResults, 
            snapshotIds: snapshotIds
        )
        return self.describeSnapshotsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeStorageVirtualMachines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStorageVirtualMachinesPaginator(
        _ input: DescribeStorageVirtualMachinesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeStorageVirtualMachinesRequest, DescribeStorageVirtualMachinesResponse> {
        return .init(
            input: input,
            command: self.describeStorageVirtualMachines,
            inputKey: \DescribeStorageVirtualMachinesRequest.nextToken,
            outputKey: \DescribeStorageVirtualMachinesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeStorageVirtualMachines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Enter a filter name:value pair to view a select set of SVMs.
    ///   - maxResults: 
    ///   - storageVirtualMachineIds: Enter the ID of one or more SVMs that you want to view.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStorageVirtualMachinesPaginator(
        filters: [StorageVirtualMachineFilter]? = nil,
        maxResults: Int? = nil,
        storageVirtualMachineIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeStorageVirtualMachinesRequest, DescribeStorageVirtualMachinesResponse> {
        let input = DescribeStorageVirtualMachinesRequest(
            filters: filters, 
            maxResults: maxResults, 
            storageVirtualMachineIds: storageVirtualMachineIds
        )
        return self.describeStorageVirtualMachinesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeVolumes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeVolumesPaginator(
        _ input: DescribeVolumesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeVolumesRequest, DescribeVolumesResponse> {
        return .init(
            input: input,
            command: self.describeVolumes,
            inputKey: \DescribeVolumesRequest.nextToken,
            outputKey: \DescribeVolumesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeVolumes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Enter a filter Name and Values pair to view a select set of volumes.
    ///   - maxResults: 
    ///   - volumeIds: The IDs of the volumes whose descriptions you want to retrieve.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeVolumesPaginator(
        filters: [VolumeFilter]? = nil,
        maxResults: Int? = nil,
        volumeIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeVolumesRequest, DescribeVolumesResponse> {
        let input = DescribeVolumesRequest(
            filters: filters, 
            maxResults: maxResults, 
            volumeIds: volumeIds
        )
        return self.describeVolumesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        _ input: ListTagsForResourceRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        return .init(
            input: input,
            command: self.listTagsForResource,
            inputKey: \ListTagsForResourceRequest.nextToken,
            outputKey: \ListTagsForResourceResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: Maximum number of tags to return in the response (integer). This parameter value must be greater than 0. The number of items that Amazon FSx returns is the minimum of the MaxResults parameter specified in the request and the service's internal maximum number of items per page.
    ///   - resourceARN: The ARN of the Amazon FSx resource that will have its tags listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        maxResults: Int? = nil,
        resourceARN: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            resourceARN: resourceARN
        )
        return self.listTagsForResourcePaginator(input, logger: logger)
    }
}

extension FSx.DescribeBackupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeBackupsRequest {
        return .init(
            backupIds: self.backupIds,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FSx.DescribeDataRepositoryAssociationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeDataRepositoryAssociationsRequest {
        return .init(
            associationIds: self.associationIds,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FSx.DescribeDataRepositoryTasksRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeDataRepositoryTasksRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            taskIds: self.taskIds
        )
    }
}

extension FSx.DescribeFileCachesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeFileCachesRequest {
        return .init(
            fileCacheIds: self.fileCacheIds,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FSx.DescribeFileSystemAliasesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeFileSystemAliasesRequest {
        return .init(
            clientRequestToken: self.clientRequestToken,
            fileSystemId: self.fileSystemId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FSx.DescribeFileSystemsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeFileSystemsRequest {
        return .init(
            fileSystemIds: self.fileSystemIds,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FSx.DescribeS3AccessPointAttachmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeS3AccessPointAttachmentsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            names: self.names,
            nextToken: token
        )
    }
}

extension FSx.DescribeSnapshotsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeSnapshotsRequest {
        return .init(
            filters: self.filters,
            includeShared: self.includeShared,
            maxResults: self.maxResults,
            nextToken: token,
            snapshotIds: self.snapshotIds
        )
    }
}

extension FSx.DescribeStorageVirtualMachinesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeStorageVirtualMachinesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            storageVirtualMachineIds: self.storageVirtualMachineIds
        )
    }
}

extension FSx.DescribeVolumesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.DescribeVolumesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            volumeIds: self.volumeIds
        )
    }
}

extension FSx.ListTagsForResourceRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FSx.ListTagsForResourceRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceARN: self.resourceARN
        )
    }
}
